Skip to content

Commit c2c451d

Browse files
committed
Merge pull request #4319 from mbenson/interpolate-profile-properties
* pr/4319: Interpolate property values for repositories
2 parents 5df8079 + 5e7376f commit c2c451d

File tree

3 files changed

+80
-5
lines changed

3 files changed

+80
-5
lines changed

spring-boot-cli/src/main/java/org/springframework/boot/cli/compiler/RepositoryConfigurationFactory.java

Lines changed: 29 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,10 @@
2323

2424
import org.apache.maven.settings.Profile;
2525
import org.apache.maven.settings.Repository;
26+
import org.codehaus.plexus.interpolation.InterpolationException;
27+
import org.codehaus.plexus.interpolation.Interpolator;
28+
import org.codehaus.plexus.interpolation.PropertiesBasedValueSource;
29+
import org.codehaus.plexus.interpolation.RegexBasedInterpolator;
2630

2731
import org.springframework.boot.cli.compiler.grape.RepositoryConfiguration;
2832
import org.springframework.boot.cli.compiler.maven.MavenSettings;
@@ -78,17 +82,37 @@ private static void addDefaultCacheAsRepository(String localRepository,
7882
}
7983

8084
private static void addActiveProfileRepositories(List<Profile> activeProfiles,
81-
List<RepositoryConfiguration> repositoryConfiguration) {
85+
List<RepositoryConfiguration> configurations) {
8286
for (Profile activeProfile : activeProfiles) {
87+
Interpolator interpolator = new RegexBasedInterpolator();
88+
interpolator.addValueSource(
89+
new PropertiesBasedValueSource(activeProfile.getProperties()));
8390
for (Repository repository : activeProfile.getRepositories()) {
84-
repositoryConfiguration.add(new RepositoryConfiguration(
85-
repository.getId(), URI.create(repository.getUrl()),
86-
repository.getSnapshots() != null
87-
? repository.getSnapshots().isEnabled() : false));
91+
configurations.add(getRepositoryConfiguration(interpolator, repository));
8892
}
8993
}
9094
}
9195

96+
private static RepositoryConfiguration getRepositoryConfiguration(
97+
Interpolator interpolator, Repository repository) {
98+
String name = interpolate(interpolator, repository.getId());
99+
String url = interpolate(interpolator, repository.getUrl());
100+
boolean snapshotsEnabled = false;
101+
if (repository.getSnapshots() != null) {
102+
snapshotsEnabled = repository.getSnapshots().isEnabled();
103+
}
104+
return new RepositoryConfiguration(name, URI.create(url), snapshotsEnabled);
105+
}
106+
107+
private static String interpolate(Interpolator interpolator, String value) {
108+
try {
109+
return interpolator.interpolate(value);
110+
}
111+
catch (InterpolationException ex) {
112+
return value;
113+
}
114+
}
115+
92116
private static File getLocalRepositoryDirectory(String localRepository) {
93117
if (StringUtils.hasText(localRepository)) {
94118
return new File(localRepository);

spring-boot-cli/src/test/java/org/springframework/boot/cli/compiler/RepositoryConfigurationFactoryTests.java

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -90,6 +90,21 @@ public void run() {
9090
"foo:bar");
9191
}
9292

93+
@Test
94+
public void interpolationProfileRepositories() {
95+
SystemProperties.doWithSystemProperties(new Runnable() {
96+
@Override
97+
public void run() {
98+
List<RepositoryConfiguration> repositoryConfiguration = RepositoryConfigurationFactory
99+
.createDefaultRepositoryConfiguration();
100+
assertRepositoryConfiguration(repositoryConfiguration, "central", "local",
101+
"spring-snapshot", "spring-milestone", "interpolate-releases",
102+
"interpolate-snapshots");
103+
}
104+
}, "user.home:src/test/resources/maven-settings/active-profile-repositories",
105+
"interpolate:true");
106+
}
107+
93108
private void assertRepositoryConfiguration(
94109
List<RepositoryConfiguration> configurations, String... expectedNames) {
95110
assertThat(configurations, hasSize(expectedNames.length));

spring-boot-cli/src/test/resources/maven-settings/active-profile-repositories/.m2/settings.xml

Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -56,6 +56,42 @@
5656
</repository>
5757
</repositories>
5858
</profile>
59+
<profile>
60+
<id>interpolation-profile</id>
61+
<activation>
62+
<property>
63+
<name>interpolate</name>
64+
<value>true</value>
65+
</property>
66+
</activation>
67+
<properties>
68+
<repo.base>maven.example.com</repo.base>
69+
<repo.content>${repo.base}/content</repo.content>
70+
</properties>
71+
<repositories>
72+
<repository>
73+
<id>interpolate-releases</id>
74+
<url>${repo.content}/releases</url>
75+
<releases>
76+
<enabled>true</enabled>
77+
<updatePolicy>never</updatePolicy>
78+
</releases>
79+
<snapshots>
80+
<enabled>false</enabled>
81+
</snapshots>
82+
</repository>
83+
<repository>
84+
<id>interpolate-snapshots</id>
85+
<url>${repo.content}/snapshots</url>
86+
<releases>
87+
<enabled>false</enabled>
88+
</releases>
89+
<snapshots>
90+
<enabled>true</enabled>
91+
</snapshots>
92+
</repository>
93+
</repositories>
94+
</profile>
5995
</profiles>
6096

6197
</settings>

0 commit comments

Comments
 (0)