From 4ab01b6e7b9c3af4fe9f6827541b9dbdbef29909 Mon Sep 17 00:00:00 2001 From: Ilayaperumal Gopinathan Date: Thu, 13 Aug 2015 09:48:08 -0700 Subject: [PATCH] Support comma separated remote repos - Change `remoteRepository` option to `remoteRepositories` that accepts comma separated string values. - AetherModuleResolver would expect set of remote repositories and create `RemoteRepository` list for the given set. Use String[] for remoteRepositories - This will let spring boot's ConfigurationProperties handle the properties and use the Map for remoteProperties in AetherModuleResolver - Generate ID for the map --- .../launcher/ModuleLauncherConfiguration.java | 11 ++++++++--- .../launcher/ModuleLauncherProperties.java | 12 ++++++------ .../module/resolver/AetherModuleResolver.java | 2 +- .../resolver/AetherModuleResolverTests.java | 17 +++++++++-------- 4 files changed, 24 insertions(+), 18 deletions(-) diff --git a/spring-cloud-stream-module-launcher/src/main/java/org/springframework/cloud/stream/module/launcher/ModuleLauncherConfiguration.java b/spring-cloud-stream-module-launcher/src/main/java/org/springframework/cloud/stream/module/launcher/ModuleLauncherConfiguration.java index 68f920ac8..dc3676909 100644 --- a/spring-cloud-stream-module-launcher/src/main/java/org/springframework/cloud/stream/module/launcher/ModuleLauncherConfiguration.java +++ b/spring-cloud-stream-module-launcher/src/main/java/org/springframework/cloud/stream/module/launcher/ModuleLauncherConfiguration.java @@ -16,7 +16,8 @@ package org.springframework.cloud.stream.module.launcher; -import java.util.Collections; +import java.util.HashMap; +import java.util.Map; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean; @@ -45,8 +46,12 @@ public class ModuleLauncherConfiguration { @Bean @ConditionalOnMissingBean(ModuleResolver.class) public ModuleResolver moduleResolver() { - return new AetherModuleResolver(properties.getLocalRepository(), Collections.singletonMap( - "remoteRepository", properties.getRemoteRepository())); + int i = 1; + Map repositoriesMap = new HashMap<>(); + for (String repository: properties.getRemoteRepositories()) { + repositoriesMap.put("repository " + i++, repository); + } + return new AetherModuleResolver(properties.getLocalRepository(), repositoriesMap); } @Bean diff --git a/spring-cloud-stream-module-launcher/src/main/java/org/springframework/cloud/stream/module/launcher/ModuleLauncherProperties.java b/spring-cloud-stream-module-launcher/src/main/java/org/springframework/cloud/stream/module/launcher/ModuleLauncherProperties.java index 00911f09c..f27fe7489 100644 --- a/spring-cloud-stream-module-launcher/src/main/java/org/springframework/cloud/stream/module/launcher/ModuleLauncherProperties.java +++ b/spring-cloud-stream-module-launcher/src/main/java/org/springframework/cloud/stream/module/launcher/ModuleLauncherProperties.java @@ -36,16 +36,16 @@ public class ModuleLauncherProperties { + File.separator + ".m2" + File.separator + "repository"); /** - * Location of a remote maven repository from which modules will be downloaded, if not available locally. + * Location of comma separated remote maven repositories from which modules will be downloaded, if not available locally. */ - private String remoteRepository = "https://repo.spring.io/libs-snapshot"; + private String[] remoteRepositories = new String[] {"https://repo.spring.io/libs-snapshot"}; - public void setRemoteRepository(String remoteRepository) { - this.remoteRepository = remoteRepository; + public void setRemoteRepositories(String[] remoteRepositories) { + this.remoteRepositories = remoteRepositories; } - protected String getRemoteRepository() { - return remoteRepository; + protected String[] getRemoteRepositories() { + return remoteRepositories; } public void setLocalRepository(File localRepository) { diff --git a/spring-cloud-stream-module-launcher/src/main/java/org/springframework/cloud/stream/module/resolver/AetherModuleResolver.java b/spring-cloud-stream-module-launcher/src/main/java/org/springframework/cloud/stream/module/resolver/AetherModuleResolver.java index 0e6795eaf..f447b4e61 100644 --- a/spring-cloud-stream-module-launcher/src/main/java/org/springframework/cloud/stream/module/resolver/AetherModuleResolver.java +++ b/spring-cloud-stream-module-launcher/src/main/java/org/springframework/cloud/stream/module/resolver/AetherModuleResolver.java @@ -118,7 +118,7 @@ public class AetherModuleResolver implements ModuleResolver { classifier = ""; } Assert.hasText(version, "'version' cannot be blank."); - + Artifact artifact = new DefaultArtifact(groupId, artifactId, classifier, extension, version); RepositorySystemSession session = newRepositorySystemSession(repositorySystem, localRepository.getAbsolutePath()); diff --git a/spring-cloud-stream-module-launcher/src/test/java/org/springframework/cloud/stream/module/resolver/AetherModuleResolverTests.java b/spring-cloud-stream-module-launcher/src/test/java/org/springframework/cloud/stream/module/resolver/AetherModuleResolverTests.java index 96a8b914d..94a373dae 100644 --- a/spring-cloud-stream-module-launcher/src/test/java/org/springframework/cloud/stream/module/resolver/AetherModuleResolverTests.java +++ b/spring-cloud-stream-module-launcher/src/test/java/org/springframework/cloud/stream/module/resolver/AetherModuleResolverTests.java @@ -15,12 +15,18 @@ package org.springframework.cloud.stream.module.resolver; +import static com.github.tomakehurst.wiremock.client.WireMock.aResponse; +import static com.github.tomakehurst.wiremock.client.WireMock.get; +import static com.github.tomakehurst.wiremock.client.WireMock.stubFor; +import static com.github.tomakehurst.wiremock.client.WireMock.urlEqualTo; +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertTrue; + import java.io.File; import java.io.IOException; import java.util.HashMap; import java.util.Map; -import com.github.tomakehurst.wiremock.junit.WireMockRule; import org.junit.Ignore; import org.junit.Rule; import org.junit.Test; @@ -29,12 +35,7 @@ import org.springframework.core.io.ClassPathResource; import org.springframework.core.io.Resource; import org.springframework.util.SocketUtils; -import static com.github.tomakehurst.wiremock.client.WireMock.aResponse; -import static com.github.tomakehurst.wiremock.client.WireMock.get; -import static com.github.tomakehurst.wiremock.client.WireMock.stubFor; -import static com.github.tomakehurst.wiremock.client.WireMock.urlEqualTo; -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertTrue; +import com.github.tomakehurst.wiremock.junit.WireMockRule; /** * @author David Turanski @@ -72,7 +73,7 @@ public class AetherModuleResolverTests { Map remoteRepos = new HashMap<>(); remoteRepos.put("modules", "http://repo.spring.io/spring-cloud-stream-modules"); AetherModuleResolver defaultModuleResolver = new AetherModuleResolver(localRepository, remoteRepos); - Resource resource = defaultModuleResolver.resolve("org.springframework.cloud.stream.module", "time-source", + Resource resource = defaultModuleResolver.resolve("org.springframework.cloud.stream.module", "time-source", "1.0.0.BUILD-SNAPSHOT", "exec", "jar"); assertTrue(resource.exists()); assertEquals(resource.getFile().getName(), "time-source-1.0.0.BUILD-SNAPSHOT-exec.jar");