Commit 5150e051 authored by Phillip Webb's avatar Phillip Webb

Allow remote restart to work with nested JARs

Update remote restart support so that JARs multi-module projects work.

Fixes gh-4040
parent e79ef9b7
...@@ -204,7 +204,7 @@ public class Restarter { ...@@ -204,7 +204,7 @@ public class Restarter {
*/ */
public void addUrls(Collection<URL> urls) { public void addUrls(Collection<URL> urls) {
Assert.notNull(urls, "Urls must not be null"); Assert.notNull(urls, "Urls must not be null");
this.urls.addAll(ChangeableUrls.fromUrls(urls).toList()); this.urls.addAll(urls);
} }
/** /**
......
...@@ -17,6 +17,9 @@ ...@@ -17,6 +17,9 @@
package org.springframework.boot.devtools.restart.server; package org.springframework.boot.devtools.restart.server;
import java.net.URL; import java.net.URL;
import java.util.Arrays;
import java.util.HashSet;
import java.util.Set;
import java.util.regex.Matcher; import java.util.regex.Matcher;
import java.util.regex.Pattern; import java.util.regex.Pattern;
...@@ -38,6 +41,11 @@ public class DefaultSourceFolderUrlFilter implements SourceFolderUrlFilter { ...@@ -38,6 +41,11 @@ public class DefaultSourceFolderUrlFilter implements SourceFolderUrlFilter {
private static final Pattern VERSION_PATTERN = Pattern private static final Pattern VERSION_PATTERN = Pattern
.compile("^-\\d+(?:\\.\\d+)*(?:[.-].+)?$"); .compile("^-\\d+(?:\\.\\d+)*(?:[.-].+)?$");
private static final Set<String> SKIPPED_PROJECTS = new HashSet<String>(
Arrays.asList("spring-boot", "spring-boot-devtools",
"spring-boot-autoconfigure", "spring-boot-actuator",
"spring-boot-starter"));
@Override @Override
public boolean isMatch(String sourceFolder, URL url) { public boolean isMatch(String sourceFolder, URL url) {
String jarName = getJarName(url); String jarName = getJarName(url);
...@@ -68,7 +76,7 @@ public class DefaultSourceFolderUrlFilter implements SourceFolderUrlFilter { ...@@ -68,7 +76,7 @@ public class DefaultSourceFolderUrlFilter implements SourceFolderUrlFilter {
} }
private boolean isFolderMatch(String folder, String jarName) { private boolean isFolderMatch(String folder, String jarName) {
if (!jarName.startsWith(folder)) { if (!jarName.startsWith(folder) || SKIPPED_PROJECTS.contains(folder)) {
return false; return false;
} }
String version = jarName.substring(folder.length()); String version = jarName.substring(folder.length());
......
...@@ -70,6 +70,22 @@ public class DefaultSourceFolderUrlFilterTests { ...@@ -70,6 +70,22 @@ public class DefaultSourceFolderUrlFilterTests {
doTest("my-module/something/quite/quite/mad/"); doTest("my-module/something/quite/quite/mad/");
} }
@Test
public void skippedProjects() throws Exception {
String sourceFolder = "/Users/me/code/spring-boot-samples/"
+ "spring-boot-sample-devtools";
URL jarUrl = new URL("jar:file:/Users/me/tmp/"
+ "spring-boot-sample-devtools-1.3.0.BUILD-SNAPSHOT.jar!/");
assertThat(this.filter.isMatch(sourceFolder, jarUrl), equalTo(true));
URL nestedJarUrl = new URL("jar:file:/Users/me/tmp/"
+ "spring-boot-sample-devtools-1.3.0.BUILD-SNAPSHOT.jar!/"
+ "lib/spring-boot-1.3.0.BUILD-SNAPSHOT.jar!/");
assertThat(this.filter.isMatch(sourceFolder, nestedJarUrl), equalTo(false));
URL fileUrl = new URL("file:/Users/me/tmp/"
+ "spring-boot-sample-devtools-1.3.0.BUILD-SNAPSHOT.jar");
assertThat(this.filter.isMatch(sourceFolder, fileUrl), equalTo(true));
}
private void doTest(String sourcePostfix) throws MalformedURLException { private void doTest(String sourcePostfix) throws MalformedURLException {
doTest(sourcePostfix, "my-module", true); doTest(sourcePostfix, "my-module", true);
doTest(sourcePostfix, "my-module-other", false); doTest(sourcePostfix, "my-module-other", false);
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment