Commit c2c451d3 authored by Phillip Webb's avatar Phillip Webb

Merge pull request #4319 from mbenson/interpolate-profile-properties

* pr/4319:
  Interpolate property values for repositories
parents 5df80792 5e7376fb
...@@ -23,6 +23,10 @@ import java.util.List; ...@@ -23,6 +23,10 @@ import java.util.List;
import org.apache.maven.settings.Profile; import org.apache.maven.settings.Profile;
import org.apache.maven.settings.Repository; import org.apache.maven.settings.Repository;
import org.codehaus.plexus.interpolation.InterpolationException;
import org.codehaus.plexus.interpolation.Interpolator;
import org.codehaus.plexus.interpolation.PropertiesBasedValueSource;
import org.codehaus.plexus.interpolation.RegexBasedInterpolator;
import org.springframework.boot.cli.compiler.grape.RepositoryConfiguration; import org.springframework.boot.cli.compiler.grape.RepositoryConfiguration;
import org.springframework.boot.cli.compiler.maven.MavenSettings; import org.springframework.boot.cli.compiler.maven.MavenSettings;
...@@ -78,17 +82,37 @@ public final class RepositoryConfigurationFactory { ...@@ -78,17 +82,37 @@ public final class RepositoryConfigurationFactory {
} }
private static void addActiveProfileRepositories(List<Profile> activeProfiles, private static void addActiveProfileRepositories(List<Profile> activeProfiles,
List<RepositoryConfiguration> repositoryConfiguration) { List<RepositoryConfiguration> configurations) {
for (Profile activeProfile : activeProfiles) { for (Profile activeProfile : activeProfiles) {
Interpolator interpolator = new RegexBasedInterpolator();
interpolator.addValueSource(
new PropertiesBasedValueSource(activeProfile.getProperties()));
for (Repository repository : activeProfile.getRepositories()) { for (Repository repository : activeProfile.getRepositories()) {
repositoryConfiguration.add(new RepositoryConfiguration( configurations.add(getRepositoryConfiguration(interpolator, repository));
repository.getId(), URI.create(repository.getUrl()),
repository.getSnapshots() != null
? repository.getSnapshots().isEnabled() : false));
} }
} }
} }
private static RepositoryConfiguration getRepositoryConfiguration(
Interpolator interpolator, Repository repository) {
String name = interpolate(interpolator, repository.getId());
String url = interpolate(interpolator, repository.getUrl());
boolean snapshotsEnabled = false;
if (repository.getSnapshots() != null) {
snapshotsEnabled = repository.getSnapshots().isEnabled();
}
return new RepositoryConfiguration(name, URI.create(url), snapshotsEnabled);
}
private static String interpolate(Interpolator interpolator, String value) {
try {
return interpolator.interpolate(value);
}
catch (InterpolationException ex) {
return value;
}
}
private static File getLocalRepositoryDirectory(String localRepository) { private static File getLocalRepositoryDirectory(String localRepository) {
if (StringUtils.hasText(localRepository)) { if (StringUtils.hasText(localRepository)) {
return new File(localRepository); return new File(localRepository);
......
...@@ -90,6 +90,21 @@ public class RepositoryConfigurationFactoryTests { ...@@ -90,6 +90,21 @@ public class RepositoryConfigurationFactoryTests {
"foo:bar"); "foo:bar");
} }
@Test
public void interpolationProfileRepositories() {
SystemProperties.doWithSystemProperties(new Runnable() {
@Override
public void run() {
List<RepositoryConfiguration> repositoryConfiguration = RepositoryConfigurationFactory
.createDefaultRepositoryConfiguration();
assertRepositoryConfiguration(repositoryConfiguration, "central", "local",
"spring-snapshot", "spring-milestone", "interpolate-releases",
"interpolate-snapshots");
}
}, "user.home:src/test/resources/maven-settings/active-profile-repositories",
"interpolate:true");
}
private void assertRepositoryConfiguration( private void assertRepositoryConfiguration(
List<RepositoryConfiguration> configurations, String... expectedNames) { List<RepositoryConfiguration> configurations, String... expectedNames) {
assertThat(configurations, hasSize(expectedNames.length)); assertThat(configurations, hasSize(expectedNames.length));
......
...@@ -56,6 +56,42 @@ ...@@ -56,6 +56,42 @@
</repository> </repository>
</repositories> </repositories>
</profile> </profile>
<profile>
<id>interpolation-profile</id>
<activation>
<property>
<name>interpolate</name>
<value>true</value>
</property>
</activation>
<properties>
<repo.base>maven.example.com</repo.base>
<repo.content>${repo.base}/content</repo.content>
</properties>
<repositories>
<repository>
<id>interpolate-releases</id>
<url>${repo.content}/releases</url>
<releases>
<enabled>true</enabled>
<updatePolicy>never</updatePolicy>
</releases>
<snapshots>
<enabled>false</enabled>
</snapshots>
</repository>
<repository>
<id>interpolate-snapshots</id>
<url>${repo.content}/snapshots</url>
<releases>
<enabled>false</enabled>
</releases>
<snapshots>
<enabled>true</enabled>
</snapshots>
</repository>
</repositories>
</profile>
</profiles> </profiles>
</settings> </settings>
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