diff --git a/spring-boot-cli/src/main/java/org/springframework/boot/cli/command/options/SourceOptions.java b/spring-boot-cli/src/main/java/org/springframework/boot/cli/command/options/SourceOptions.java index 4165466b90..0b1897a73f 100644 --- a/spring-boot-cli/src/main/java/org/springframework/boot/cli/command/options/SourceOptions.java +++ b/spring-boot-cli/src/main/java/org/springframework/boot/cli/command/options/SourceOptions.java @@ -16,6 +16,7 @@ package org.springframework.boot.cli.command.options; +import java.io.File; import java.util.ArrayList; import java.util.Collections; import java.util.List; @@ -78,13 +79,20 @@ public class SourceOptions { if ("--".equals(filename)) { break; } - List urls = ResourceUtils.getUrls(filename, classLoader); + List urls = new ArrayList(); + File fileCandidate = new File(filename); + if (fileCandidate.isFile()) { + urls.add(fileCandidate.getAbsoluteFile().toURI().toString()); + } + else if (!isAbsoluteWindowsFile(fileCandidate)) { + urls.addAll(ResourceUtils.getUrls(filename, classLoader)); + } for (String url : urls) { - if (url.endsWith(".groovy") || url.endsWith(".java")) { + if (isSource(url)) { sources.add(url); } } - if ((filename.endsWith(".groovy") || filename.endsWith(".java"))) { + if (isSource(filename)) { if (urls.isEmpty()) { throw new IllegalArgumentException("Can't find " + filename); } @@ -100,6 +108,18 @@ public class SourceOptions { this.sources = Collections.unmodifiableList(sources); } + private boolean isAbsoluteWindowsFile(File file) { + return isWindows() && file.isAbsolute(); + } + + private boolean isWindows() { + return File.separatorChar == '\\'; + } + + private boolean isSource(String name) { + return name.endsWith(".java") || name.endsWith(".groovy"); + } + public List getArgs() { return this.args; } diff --git a/spring-boot-tools/spring-boot-loader/src/main/java/org/springframework/boot/loader/LaunchedURLClassLoader.java b/spring-boot-tools/spring-boot-loader/src/main/java/org/springframework/boot/loader/LaunchedURLClassLoader.java index a9d0e1d469..5609899813 100644 --- a/spring-boot-tools/spring-boot-loader/src/main/java/org/springframework/boot/loader/LaunchedURLClassLoader.java +++ b/spring-boot-tools/spring-boot-loader/src/main/java/org/springframework/boot/loader/LaunchedURLClassLoader.java @@ -50,12 +50,7 @@ public class LaunchedURLClassLoader extends URLClassLoader { public URL findResource(String name) { Handler.setUseFastConnectionExceptions(true); try { - try { - return super.findResource(name); - } - catch (IllegalArgumentException ex) { - return null; - } + return super.findResource(name); } finally { Handler.setUseFastConnectionExceptions(false);