diff --git a/spring-boot-devtools/src/main/java/org/springframework/boot/devtools/restart/ChangeableUrls.java b/spring-boot-devtools/src/main/java/org/springframework/boot/devtools/restart/ChangeableUrls.java index a8587fd055..b8d013522d 100644 --- a/spring-boot-devtools/src/main/java/org/springframework/boot/devtools/restart/ChangeableUrls.java +++ b/spring-boot-devtools/src/main/java/org/springframework/boot/devtools/restart/ChangeableUrls.java @@ -96,7 +96,7 @@ final class ChangeableUrls implements Iterable { return Collections.emptyList(); } try { - return getUrlsFromClassPathAttribute(jarFile.getManifest()); + return getUrlsFromClassPathAttribute(url, jarFile.getManifest()); } catch (IOException ex) { throw new IllegalStateException( @@ -117,7 +117,7 @@ final class ChangeableUrls implements Iterable { return null; } - private static List getUrlsFromClassPathAttribute(Manifest manifest) { + private static List getUrlsFromClassPathAttribute(URL base, Manifest manifest) { String classPath = manifest.getMainAttributes() .getValue(Attributes.Name.CLASS_PATH); if (!StringUtils.hasText(classPath)) { @@ -127,7 +127,7 @@ final class ChangeableUrls implements Iterable { List urls = new ArrayList(entries.length); for (String entry : entries) { try { - urls.add(new URL(entry)); + urls.add(new URL(base, entry)); } catch (MalformedURLException ex) { throw new IllegalStateException( diff --git a/spring-boot-devtools/src/test/java/org/springframework/boot/devtools/restart/ChangeableUrlsTests.java b/spring-boot-devtools/src/test/java/org/springframework/boot/devtools/restart/ChangeableUrlsTests.java index f849619e2e..0e81b4fa03 100644 --- a/spring-boot-devtools/src/test/java/org/springframework/boot/devtools/restart/ChangeableUrlsTests.java +++ b/spring-boot-devtools/src/test/java/org/springframework/boot/devtools/restart/ChangeableUrlsTests.java @@ -75,10 +75,12 @@ public class ChangeableUrlsTests { public void urlsFromJarClassPathAreConsidered() throws Exception { URL projectCore = makeUrl("project-core"); URL projectWeb = makeUrl("project-web"); + File relative = this.temporaryFolder.newFolder(); ChangeableUrls urls = ChangeableUrls.fromUrlClassLoader(new URLClassLoader( new URL[] { makeJarFileWithUrlsInManifestClassPath(projectCore, - projectWeb) })); - assertThat(urls.toList()).containsExactly(projectCore, projectWeb); + projectWeb, relative.getName() + "/") })); + assertThat(urls.toList()).containsExactly(projectCore, projectWeb, + relative.toURI().toURL()); } private URL makeUrl(String name) throws IOException { @@ -90,7 +92,7 @@ public class ChangeableUrlsTests { return file.toURI().toURL(); } - private URL makeJarFileWithUrlsInManifestClassPath(URL... urls) throws Exception { + private URL makeJarFileWithUrlsInManifestClassPath(Object... urls) throws Exception { File classpathJar = this.temporaryFolder.newFile("classpath.jar"); Manifest manifest = new Manifest(); manifest.getMainAttributes().putValue(Attributes.Name.MANIFEST_VERSION.toString(),