diff --git a/spring-boot-cli/src/main/java/org/springframework/boot/cli/command/GrabCommand.java b/spring-boot-cli/src/main/java/org/springframework/boot/cli/command/GrabCommand.java index f1a3b8f0bdb..6475d0e631b 100644 --- a/spring-boot-cli/src/main/java/org/springframework/boot/cli/command/GrabCommand.java +++ b/spring-boot-cli/src/main/java/org/springframework/boot/cli/command/GrabCommand.java @@ -16,7 +16,6 @@ package org.springframework.boot.cli.command; -import java.io.File; import java.util.List; import joptsimple.OptionSet; @@ -27,7 +26,6 @@ import org.springframework.boot.cli.compiler.GroovyCompilerConfiguration; import org.springframework.boot.cli.compiler.GroovyCompilerConfigurationAdapter; import org.springframework.boot.cli.compiler.RepositoryConfigurationFactory; import org.springframework.boot.cli.compiler.grape.RepositoryConfiguration; -import org.springframework.util.StringUtils; /** * {@link Command} to grab the dependencies of one or more Groovy scripts @@ -57,33 +55,10 @@ public class GrabCommand extends OptionParsingCommand { System.setProperty("grape.root", "."); } - if (!new File(System.getProperty("grape.root")).equals(getM2HomeDirectory())) { - GrabCommand.addDefaultCacheAsRespository(repositoryConfiguration); - } GroovyCompiler groovyCompiler = new GroovyCompiler(configuration); groovyCompiler.compile(fileOptions.getFilesArray()); } } - /** - * Add the default local M2 cache directory as a remote repository. Only do this if - * the local cache location has been changed from the default. - * - * @param repositoryConfiguration - */ - public static void addDefaultCacheAsRespository( - List repositoryConfiguration) { - repositoryConfiguration.add(0, new RepositoryConfiguration("local", new File( - getM2HomeDirectory(), "repository").toURI(), true)); - } - - private static File getM2HomeDirectory() { - String mavenRoot = System.getProperty("maven.home"); - if (StringUtils.hasLength(mavenRoot)) { - return new File(mavenRoot); - } - return new File(System.getProperty("user.home"), ".m2"); - } - } diff --git a/spring-boot-cli/src/main/java/org/springframework/boot/cli/compiler/RepositoryConfigurationFactory.java b/spring-boot-cli/src/main/java/org/springframework/boot/cli/compiler/RepositoryConfigurationFactory.java index d0c62fa0600..413cfd2f1c6 100644 --- a/spring-boot-cli/src/main/java/org/springframework/boot/cli/compiler/RepositoryConfigurationFactory.java +++ b/spring-boot-cli/src/main/java/org/springframework/boot/cli/compiler/RepositoryConfigurationFactory.java @@ -16,11 +16,13 @@ package org.springframework.boot.cli.compiler; +import java.io.File; import java.net.URI; import java.util.ArrayList; import java.util.List; import org.springframework.boot.cli.compiler.grape.RepositoryConfiguration; +import org.springframework.util.StringUtils; /** * Factory used to create {@link RepositoryConfiguration}s. @@ -52,7 +54,31 @@ public final class RepositoryConfigurationFactory { repositoryConfiguration.add(SPRING_MILESTONE); } + addDefaultCacheAsRespository(repositoryConfiguration); return repositoryConfiguration; } + /** + * Add the default local M2 cache directory as a remote repository. Only do this if + * the local cache location has been changed from the default. + * + * @param repositoryConfiguration + */ + public static void addDefaultCacheAsRespository( + List repositoryConfiguration) { + RepositoryConfiguration repository = new RepositoryConfiguration("local", + new File(getM2HomeDirectory(), "repository").toURI(), true); + if (!repositoryConfiguration.contains(repository)) { + repositoryConfiguration.add(0, repository); + } + } + + private static File getM2HomeDirectory() { + String mavenRoot = System.getProperty("maven.home"); + if (StringUtils.hasLength(mavenRoot)) { + return new File(mavenRoot); + } + return new File(System.getProperty("user.home"), ".m2"); + } + } diff --git a/spring-boot-cli/src/main/java/org/springframework/boot/cli/compiler/grape/AetherGrapeEngine.java b/spring-boot-cli/src/main/java/org/springframework/boot/cli/compiler/grape/AetherGrapeEngine.java index a137359892c..263910b9c77 100644 --- a/spring-boot-cli/src/main/java/org/springframework/boot/cli/compiler/grape/AetherGrapeEngine.java +++ b/spring-boot-cli/src/main/java/org/springframework/boot/cli/compiler/grape/AetherGrapeEngine.java @@ -25,6 +25,7 @@ import java.net.URI; import java.util.ArrayList; import java.util.Arrays; import java.util.Collection; +import java.util.Collections; import java.util.List; import java.util.Map; @@ -95,7 +96,10 @@ public class AetherGrapeEngine implements GrapeEngine { session.setProxySelector(this.proxySelector); this.session = session; this.repositories = new ArrayList(); - for (RemoteRepository repository : remoteRepositories) { + List remotes = new ArrayList( + remoteRepositories); + Collections.reverse(remotes); // priority is reversed in addRepository + for (RemoteRepository repository : remotes) { addRepository(repository); } this.progressReporter = getProgressReporter(session); diff --git a/spring-boot-cli/src/main/java/org/springframework/boot/cli/compiler/grape/RepositoryConfiguration.java b/spring-boot-cli/src/main/java/org/springframework/boot/cli/compiler/grape/RepositoryConfiguration.java index 601c7db0b39..bd047e3796e 100644 --- a/spring-boot-cli/src/main/java/org/springframework/boot/cli/compiler/grape/RepositoryConfiguration.java +++ b/spring-boot-cli/src/main/java/org/springframework/boot/cli/compiler/grape/RepositoryConfiguration.java @@ -52,6 +52,12 @@ public final class RepositoryConfiguration { return this.name; } + @Override + public String toString() { + return "RepositoryConfiguration [name=" + this.name + ", uri=" + this.uri + + ", snapshotsEnabled=" + this.snapshotsEnabled + "]"; + } + /** * @return the uri of the repository */ @@ -67,4 +73,30 @@ public final class RepositoryConfiguration { return this.snapshotsEnabled; } + @Override + public int hashCode() { + final int prime = 31; + int result = 1; + result = prime * result + ((this.name == null) ? 0 : this.name.hashCode()); + return result; + } + + @Override + public boolean equals(Object obj) { + if (this == obj) + return true; + if (obj == null) + return false; + if (getClass() != obj.getClass()) + return false; + RepositoryConfiguration other = (RepositoryConfiguration) obj; + if (this.name == null) { + if (other.name != null) + return false; + } + else if (!this.name.equals(other.name)) + return false; + return true; + } + } \ No newline at end of file diff --git a/spring-boot-cli/src/test/java/org/springframework/boot/cli/CliTester.java b/spring-boot-cli/src/test/java/org/springframework/boot/cli/CliTester.java index bb83d448e32..b57bd73a19f 100644 --- a/spring-boot-cli/src/test/java/org/springframework/boot/cli/CliTester.java +++ b/spring-boot-cli/src/test/java/org/springframework/boot/cli/CliTester.java @@ -88,8 +88,14 @@ public class CliTester implements TestRule { return Executors.newSingleThreadExecutor().submit(new Callable() { @Override public T call() throws Exception { - command.run(sources); - return command; + ClassLoader loader = Thread.currentThread().getContextClassLoader(); + try { + command.run(sources); + return command; + } + finally { + Thread.currentThread().setContextClassLoader(loader); + } } }); } diff --git a/spring-boot-cli/src/test/java/org/springframework/boot/cli/GrabCommandIntegrationTests.java b/spring-boot-cli/src/test/java/org/springframework/boot/cli/GrabCommandIntegrationTests.java index b16658aefd8..680fc5c495e 100644 --- a/spring-boot-cli/src/test/java/org/springframework/boot/cli/GrabCommandIntegrationTests.java +++ b/spring-boot-cli/src/test/java/org/springframework/boot/cli/GrabCommandIntegrationTests.java @@ -54,9 +54,8 @@ public class GrabCommandIntegrationTests { // Use --autoconfigure=false to limit the amount of downloaded dependencies String output = this.cli.grab("grab.groovy", "--autoconfigure=false"); - assertTrue(output.contains("Downloading: file:")); assertTrue(new File("target/repository/net/sf/jopt-simple/jopt-simple") .isDirectory()); - + assertTrue(output.contains("Downloading: file:")); } } diff --git a/spring-boot-cli/src/test/java/org/springframework/boot/cli/SpringCliTests.java b/spring-boot-cli/src/test/java/org/springframework/boot/cli/SpringCliTests.java index 9602b77311b..672dca28d85 100644 --- a/spring-boot-cli/src/test/java/org/springframework/boot/cli/SpringCliTests.java +++ b/spring-boot-cli/src/test/java/org/springframework/boot/cli/SpringCliTests.java @@ -20,6 +20,7 @@ import java.util.Arrays; import java.util.EnumSet; import java.util.Set; +import org.junit.After; import org.junit.Before; import org.junit.Rule; import org.junit.Test; @@ -60,8 +61,16 @@ public class SpringCliTests { private Set calls = EnumSet.noneOf(Call.class); + private ClassLoader loader; + + @After + public void close() { + Thread.currentThread().setContextClassLoader(this.loader); + } + @Before public void setup() { + this.loader = Thread.currentThread().getContextClassLoader(); MockitoAnnotations.initMocks(this); this.cli = new SpringCli() {