Skip to content

Commit f8f8eb0

Browse files
committed
Support mapping to classifiers
1 parent 6aa60df commit f8f8eb0

File tree

5 files changed

+48
-20
lines changed

5 files changed

+48
-20
lines changed

CHANGELOG.md

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,7 @@
11
# Java Module Dependencies Maven Extension - Changelog
22

3+
## Versions 0.2
4+
* Support mapping to coordinates with classifier, where classifiers can also be properties set in the build
5+
36
## Versions 0.1
47
* Initial released inspired by github.com/gradlex-org/java-module-dependencies

README.MD

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,7 @@ Add this to one of your parent POMs:
3939
<extension>
4040
<groupId>org.gradlex</groupId>
4141
<artifactId>java-module-dependencies-maven-extension</artifactId>
42-
<version>0.1</version>
42+
<version>0.2</version>
4343
</extension>
4444
</extensions>
4545
</build>

build.gradle.kts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ plugins {
88
}
99

1010
group = "org.gradlex"
11-
version = "0.1"
11+
version = "0.2"
1212

1313
java {
1414
toolchain.languageVersion = JavaLanguageVersion.of(17)

src/main/java/org/gradlex/maven/javamodule/dependencies/ConfigurationUtil.java

Lines changed: 30 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,8 @@
1919
import org.apache.maven.model.Dependency;
2020
import org.apache.maven.model.DependencyManagement;
2121
import org.apache.maven.project.MavenProject;
22+
import org.codehaus.plexus.interpolation.InterpolationException;
23+
import org.codehaus.plexus.interpolation.Interpolator;
2224
import org.gradlex.maven.javamodule.dependencies.internal.utils.ModuleInfo;
2325
import org.slf4j.Logger;
2426
import org.slf4j.LoggerFactory;
@@ -31,19 +33,19 @@ class ConfigurationUtil {
3133

3234
private static final Logger LOGGER = LoggerFactory.getLogger(ConfigurationUtil.class);
3335

34-
static void addDependenciesForModuleInfo(String from, List<Dependency> dependencies, ModuleInfo mainModuleInfo, ModuleInfo testModuleInfo, List<Dependency> managed, Map<String, String> moduleNameToLocal, Map<String, String> localTestMappings, Map<String, String> localMappings) {
35-
mainModuleInfo.get(ModuleInfo.Directive.REQUIRES).forEach(d -> addDependency(from, dependencies, managed, moduleNameToLocal, localTestMappings, localMappings, "compile", d)); // should be "runtime" in consumer BOM
36-
mainModuleInfo.get(ModuleInfo.Directive.REQUIRES_TRANSITIVE).forEach(d -> addDependency(from, dependencies, managed, moduleNameToLocal, localTestMappings, localMappings, "compile", d));
37-
mainModuleInfo.get(ModuleInfo.Directive.REQUIRES_STATIC).forEach(d -> addDependency(from, dependencies, managed, moduleNameToLocal, localTestMappings, localMappings, "provided", d));
38-
mainModuleInfo.get(ModuleInfo.Directive.REQUIRES_STATIC_TRANSITIVE).forEach(d -> addDependency(from, dependencies, managed, moduleNameToLocal, localTestMappings, localMappings, "compile", d)); // should be "???" in consumer BOM
36+
static void addDependenciesForModuleInfo(String from, List<Dependency> dependencies, ModuleInfo mainModuleInfo, ModuleInfo testModuleInfo, List<Dependency> managed, Map<String, String> moduleNameToLocal, Map<String, String> localTestMappings, Map<String, String> localMappings, Interpolator interpolator) {
37+
mainModuleInfo.get(ModuleInfo.Directive.REQUIRES).forEach(d -> addDependency(from, dependencies, managed, moduleNameToLocal, localTestMappings, localMappings, "compile", d, interpolator)); // should be "runtime" in consumer BOM
38+
mainModuleInfo.get(ModuleInfo.Directive.REQUIRES_TRANSITIVE).forEach(d -> addDependency(from, dependencies, managed, moduleNameToLocal, localTestMappings, localMappings, "compile", d, interpolator));
39+
mainModuleInfo.get(ModuleInfo.Directive.REQUIRES_STATIC).forEach(d -> addDependency(from, dependencies, managed, moduleNameToLocal, localTestMappings, localMappings, "provided", d, interpolator));
40+
mainModuleInfo.get(ModuleInfo.Directive.REQUIRES_STATIC_TRANSITIVE).forEach(d -> addDependency(from, dependencies, managed, moduleNameToLocal, localTestMappings, localMappings, "compile", d, interpolator)); // should be "???" in consumer BOM
3941

40-
testModuleInfo.get(ModuleInfo.Directive.REQUIRES).forEach(d -> addDependency(from, dependencies, managed, moduleNameToLocal, localTestMappings, localMappings, "test", d));
41-
testModuleInfo.get(ModuleInfo.Directive.REQUIRES_TRANSITIVE).forEach(d -> addDependency(from, dependencies, managed, moduleNameToLocal, localTestMappings, localMappings, "test", d));
42-
testModuleInfo.get(ModuleInfo.Directive.REQUIRES_STATIC).forEach(d -> addDependency(from, dependencies, managed, moduleNameToLocal, localTestMappings, localMappings, "test", d));
43-
testModuleInfo.get(ModuleInfo.Directive.REQUIRES_STATIC_TRANSITIVE).forEach(d -> addDependency(from, dependencies, managed, moduleNameToLocal, localTestMappings, localMappings, "test", d));
42+
testModuleInfo.get(ModuleInfo.Directive.REQUIRES).forEach(d -> addDependency(from, dependencies, managed, moduleNameToLocal, localTestMappings, localMappings, "test", d, interpolator));
43+
testModuleInfo.get(ModuleInfo.Directive.REQUIRES_TRANSITIVE).forEach(d -> addDependency(from, dependencies, managed, moduleNameToLocal, localTestMappings, localMappings, "test", d, interpolator));
44+
testModuleInfo.get(ModuleInfo.Directive.REQUIRES_STATIC).forEach(d -> addDependency(from, dependencies, managed, moduleNameToLocal, localTestMappings, localMappings, "test", d, interpolator));
45+
testModuleInfo.get(ModuleInfo.Directive.REQUIRES_STATIC_TRANSITIVE).forEach(d -> addDependency(from, dependencies, managed, moduleNameToLocal, localTestMappings, localMappings, "test", d, interpolator));
4446
}
4547

46-
private static void addDependency(String from, List<Dependency> dependencies, List<Dependency> managed, Map<String, String> moduleNameToLocal, Map<String, String> moduleNameToLocalTest, Map<String, String> localMappings, String scope, String moduleName) {
48+
private static void addDependency(String from, List<Dependency> dependencies, List<Dependency> managed, Map<String, String> moduleNameToLocal, Map<String, String> moduleNameToLocalTest, Map<String, String> localMappings, String scope, String moduleName, Interpolator interpolator) {
4749
if (JDKInfo.MODULES.contains(moduleName)) {
4850
return;
4951
}
@@ -54,13 +56,13 @@ private static void addDependency(String from, List<Dependency> dependencies, Li
5456
}
5557
if (localModule != null) {
5658
String[] gav = localModule.split(":");
57-
defineDependency(dependencies, scope, gav[0], gav[1], gav[2], false);
59+
defineDependency(dependencies, scope, gav[0], gav[1], gav[2], null);
5860
return;
5961
}
6062
String localTestModule = moduleNameToLocalTest.get(moduleName);
6163
if (localTestModule != null) {
6264
String[] gav = localTestModule.split(":");
63-
defineDependency(dependencies, scope, gav[0], gav[1], gav[2], true);
65+
defineDependency(dependencies, scope, gav[0], gav[1], gav[2], "tests");
6466
return;
6567
}
6668

@@ -74,23 +76,34 @@ private static void addDependency(String from, List<Dependency> dependencies, Li
7476
}
7577

7678
String[] ga = externalModule.split(":");
79+
String[] artifactAndClassifier = ga[1].split("\\|");
80+
String group = ga[0];
81+
String artifact = artifactAndClassifier[0];
82+
String classifier;
83+
84+
try {
85+
classifier = artifactAndClassifier.length > 1 ? interpolator.interpolate(artifactAndClassifier[1]) : null;
86+
} catch (InterpolationException e) {
87+
throw new RuntimeException(e);
88+
}
89+
7790
Optional<Dependency> version =
78-
managed.stream().filter(v -> v.getGroupId().equals(ga[0]) && v.getArtifactId().equals(ga[1])).findFirst();
91+
managed.stream().filter(v -> v.getGroupId().equals(group) && v.getArtifactId().equals(artifact)).findFirst();
7992
if (!version.isPresent()) {
8093
LOGGER.warn("Version missing: {}", externalModule);
8194
return;
8295
}
83-
defineDependency(dependencies, scope, ga[0], ga[1], version.get().getVersion(), false);
96+
defineDependency(dependencies, scope, group, artifact, version.get().getVersion(), classifier);
8497
}
8598

86-
private static void defineDependency(List<Dependency> dependencies, String scope, String group, String artifactId, String version, boolean testsClassifier) {
99+
private static void defineDependency(List<Dependency> dependencies, String scope, String group, String artifactId, String version, String classifier) {
87100
Dependency dependency = new Dependency();
88101
dependency.setGroupId(group);
89102
dependency.setArtifactId(artifactId);
90103
dependency.setVersion(version);
91104
dependency.setScope(scope);
92-
if (testsClassifier) {
93-
dependency.setClassifier("tests");
105+
if (classifier != null) {
106+
dependency.setClassifier(classifier);
94107
}
95108
dependencies.add(dependency);
96109
}

src/main/java/org/gradlex/maven/javamodule/dependencies/JavaModuleDependenciesLifecycleParticipant.java

Lines changed: 13 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,10 @@
2121
import org.apache.maven.execution.MavenSession;
2222
import org.apache.maven.model.Dependency;
2323
import org.apache.maven.project.MavenProject;
24+
import org.codehaus.plexus.interpolation.Interpolator;
25+
import org.codehaus.plexus.interpolation.PropertiesBasedValueSource;
26+
import org.codehaus.plexus.interpolation.StringSearchInterpolator;
27+
import org.codehaus.plexus.interpolation.ValueSource;
2428

2529
import javax.inject.Named;
2630
import javax.inject.Singleton;
@@ -67,7 +71,8 @@ public void afterProjectsRead(MavenSession session) throws MavenExecutionExcepti
6771
managedDependencies,
6872
moduleInfoCache.getMainModuleNameToCoordinates(),
6973
moduleInfoCache.getTestModuleNameToCoordinates(),
70-
localMappings);
74+
localMappings,
75+
interpolator(project));
7176
}
7277
}
7378

@@ -87,6 +92,13 @@ private Map<String, String> loadLocalMappings(File root) {
8792
return localMappings;
8893
}
8994

95+
private Interpolator interpolator(MavenProject project) {
96+
StringSearchInterpolator interpolator = new StringSearchInterpolator();
97+
ValueSource allProperties = new PropertiesBasedValueSource(project.getModel().getProperties());
98+
interpolator.addValueSource(allProperties);
99+
return interpolator;
100+
}
101+
90102
@Override
91103
public void afterSessionEnd(MavenSession session) {
92104
}

0 commit comments

Comments
 (0)