Skip to content

Commit 8525fb8

Browse files
Support for .mvn/maven.config (#468)
1 parent 5a93480 commit 8525fb8

File tree

8 files changed

+262
-330
lines changed

8 files changed

+262
-330
lines changed

components/sbm-core/src/main/java/org/springframework/sbm/build/impl/OpenRewriteMavenBuildFile.java

+24-19
Original file line numberDiff line numberDiff line change
@@ -135,7 +135,11 @@ public String getDisplayName() {
135135

136136
private final RewriteExecutionContext executionContext;
137137

138-
public OpenRewriteMavenBuildFile(Path absoluteProjectPath, Xml.Document sourceFile, ApplicationEventPublisher eventPublisher, RewriteExecutionContext executionContext) {
138+
139+
public OpenRewriteMavenBuildFile(Path absoluteProjectPath,
140+
Xml.Document sourceFile,
141+
ApplicationEventPublisher eventPublisher,
142+
RewriteExecutionContext executionContext) {
139143
super(absoluteProjectPath, sourceFile);
140144
this.eventPublisher = eventPublisher;
141145
this.executionContext = executionContext;
@@ -264,14 +268,25 @@ public List<Dependency> getRequestedDependencies() {
264268
.map(d -> mapDependency(d))
265269
.map(d -> {
266270
if(d.getType() == null || d.getClassifier() == null || d.getVersion() == null) {
267-
List<ResolvedDependency> dependencies = getPom().findDependencies(d.getGroupId(), d.getArtifactId(),
268-
d.getScope() != null ? Scope.fromName(d.getScope()) : null);
271+
272+
String groupId = evaluate(d.getGroupId());
273+
String artifactId = evaluate(d.getArtifactId());
274+
String version = evaluate(d.getVersion());
275+
276+
List<ResolvedDependency> dependencies = getPom().findDependencies(
277+
groupId,
278+
artifactId,
279+
d.getScope() != null ? Scope.fromName(d.getScope()) : null
280+
);
269281
ResolvedDependency resolvedDependency = dependencies.get(0);
270282
d.setVersion(resolvedDependency.getVersion());
271283
d.setClassifier(resolvedDependency.getClassifier());
272284
d.setType(resolvedDependency.getType());
285+
d.setArtifactId(artifactId);
286+
d.setGroupId(groupId);
287+
273288
if(d.getScope() == null ) {
274-
String s = resolveScope(d.getGroupId(), d.getArtifactId(), d.getType(), d.getClassifier());
289+
String s = resolveScope(groupId, artifactId, d.getType(), d.getClassifier());
275290
d.setScope(s);
276291
}
277292
}
@@ -351,19 +366,6 @@ private String resolveScope(String groupId, String artifactId, @Nullable String
351366
return managedScope != null ? managedScope.name().toLowerCase() : null;
352367
}
353368

354-
private String calculateVersion(org.openrewrite.maven.tree.Dependency d) {
355-
String version = null;
356-
if (d.getVersion() != null && !d.getVersion().startsWith("${")) {
357-
version = d.getVersion();
358-
} else {
359-
String managedVersion = getPom().getPom().getManagedVersion(d.getGroupId(), d.getArtifactId(), null, null);
360-
if (managedVersion != null) {
361-
version = managedVersion;
362-
}
363-
}
364-
return version;
365-
}
366-
367369
private org.springframework.sbm.build.api.Dependency mapDependency(Scope scope, ResolvedDependency d) {
368370
return new Dependency(
369371
d.getGroupId(),
@@ -617,9 +619,8 @@ public String getArtifactId() {
617619

618620
@Override
619621
public String getVersion() {
620-
return getPom().getPom().getVersion();
622+
return evaluate(getPom().getPom().getVersion());
621623
}
622-
623624
@Override
624625
public String getCoordinates() {
625626
return getGroupId() + ":" + getArtifactId() + ":" + getVersion();
@@ -796,4 +797,8 @@ public void removePlugins(String... coordinates) {
796797
}
797798
}
798799

800+
801+
private String evaluate(String expression) {
802+
return getPom().getPom().getValue(expression);
803+
}
799804
}

components/sbm-core/src/main/java/org/springframework/sbm/build/migration/actions/AddMinimalPomXml.java

+4-2
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,6 @@
2020
import freemarker.template.Template;
2121
import lombok.Setter;
2222
import org.openrewrite.Parser;
23-
import org.openrewrite.java.JavaParser;
2423
import org.openrewrite.xml.tree.Xml;
2524
import org.springframework.beans.factory.annotation.Autowired;
2625
import org.springframework.sbm.build.impl.OpenRewriteMavenBuildFile;
@@ -65,7 +64,10 @@ public void apply(ProjectContext context) {
6564
RewriteMavenParser rewriteMavenParser = new RewriteMavenParser();
6665
Parser.Input input = new Parser.Input(Path.of("pom.xml"), () -> new ByteArrayInputStream(src.getBytes(StandardCharsets.UTF_8)));
6766
Xml.Document maven = rewriteMavenParser.parseInputs(List.of(input), null, new RewriteExecutionContext(getEventPublisher())).get(0);
68-
OpenRewriteMavenBuildFile rewriteMavenBuildFile = new OpenRewriteMavenBuildFile(context.getProjectRootDirectory(), maven, getEventPublisher(), new RewriteExecutionContext(getEventPublisher()));
67+
OpenRewriteMavenBuildFile rewriteMavenBuildFile = new OpenRewriteMavenBuildFile(
68+
context.getProjectRootDirectory(),
69+
maven, getEventPublisher(), new RewriteExecutionContext(getEventPublisher())
70+
);
6971
context.getProjectResources().add(rewriteMavenBuildFile);
7072
}
7173
}

components/sbm-core/src/main/java/org/springframework/sbm/build/resource/BuildFileResourceWrapper.java

+6-2
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,6 @@
3333
public class BuildFileResourceWrapper implements ProjectResourceWrapper<OpenRewriteMavenBuildFile> {
3434

3535
private final ApplicationEventPublisher eventPublisher;
36-
private final JavaParser javaParser;
3736

3837
@Override
3938
public boolean shouldHandle(RewriteSourceFileHolder<? extends SourceFile> rewriteSourceFileHolder) {
@@ -43,7 +42,12 @@ public boolean shouldHandle(RewriteSourceFileHolder<? extends SourceFile> rewrit
4342
@Override
4443
public OpenRewriteMavenBuildFile wrapRewriteSourceFileHolder(RewriteSourceFileHolder<? extends SourceFile> rewriteSourceFileHolder) {
4544
Xml.Document maven = (Xml.Document) rewriteSourceFileHolder.getSourceFile();
46-
return new OpenRewriteMavenBuildFile(rewriteSourceFileHolder.getAbsoluteProjectDir(), maven, eventPublisher, new RewriteExecutionContext(eventPublisher));
45+
46+
return new OpenRewriteMavenBuildFile(
47+
rewriteSourceFileHolder.getAbsoluteProjectDir(),
48+
maven, eventPublisher,
49+
new RewriteExecutionContext(eventPublisher)
50+
);
4751
}
4852

4953
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,63 @@
1+
/*
2+
* Copyright 2021 - 2022 the original author or authors.
3+
*
4+
* Licensed under the Apache License, Version 2.0 (the "License");
5+
* you may not use this file except in compliance with the License.
6+
* You may obtain a copy of the License at
7+
*
8+
* https://www.apache.org/licenses/LICENSE-2.0
9+
*
10+
* Unless required by applicable law or agreed to in writing, software
11+
* distributed under the License is distributed on an "AS IS" BASIS,
12+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13+
* See the License for the specific language governing permissions and
14+
* limitations under the License.
15+
*/
16+
17+
package org.springframework.sbm.project.parser;
18+
19+
import lombok.RequiredArgsConstructor;
20+
import org.springframework.core.io.Resource;
21+
import org.springframework.stereotype.Component;
22+
23+
import java.io.IOException;
24+
import java.util.HashMap;
25+
import java.util.List;
26+
import java.util.Map;
27+
import java.util.Optional;
28+
import java.util.Properties;
29+
30+
@Component
31+
@RequiredArgsConstructor
32+
public class MavenConfigHandler {
33+
34+
public void injectMavenConfigIntoSystemProperties(List<Resource> resources) {
35+
36+
Optional<Resource> mavenConfig = resources.stream().filter(k -> "maven.config".equals(k.getFilename()))
37+
.findFirst();
38+
39+
Map<String, String> mavenConfigMap = new HashMap<>();
40+
41+
if (mavenConfig.isPresent()) {
42+
Properties properties = new Properties();
43+
try {
44+
properties.load(mavenConfig.get().getInputStream());
45+
46+
properties.forEach((key, value) -> {
47+
48+
String varKey = key.toString();
49+
50+
if (varKey.startsWith("-D")) {
51+
mavenConfigMap.put(varKey.replace("-D", ""), value.toString());
52+
}
53+
});
54+
55+
} catch (IOException e) {
56+
57+
throw new RuntimeException(e);
58+
}
59+
}
60+
61+
mavenConfigMap.keySet().forEach(k -> System.setProperty(k, mavenConfigMap.get(k)));
62+
}
63+
}

0 commit comments

Comments
 (0)