Skip to content

Commit cee5827

Browse files
committed
Create a proper ExternalDependency object instead of a "GAV" Map
This addresses: Declaring dependencies using multi-string notation has been deprecated.
1 parent 528bead commit cee5827

File tree

3 files changed

+38
-38
lines changed

3 files changed

+38
-38
lines changed

src/main/java/org/gradlex/javamodule/dependencies/GAV.java

Lines changed: 0 additions & 23 deletions
This file was deleted.

src/main/java/org/gradlex/javamodule/dependencies/JavaModuleDependenciesExtension.java

Lines changed: 12 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@
2020
import org.gradle.api.artifacts.Configuration;
2121
import org.gradle.api.artifacts.ConfigurationContainer;
2222
import org.gradle.api.artifacts.Dependency;
23+
import org.gradle.api.artifacts.ExternalDependency;
2324
import org.gradle.api.artifacts.ModuleDependency;
2425
import org.gradle.api.artifacts.ProjectDependency;
2526
import org.gradle.api.artifacts.VersionCatalog;
@@ -63,6 +64,7 @@
6364
import java.util.stream.Collectors;
6465

6566
import static java.util.Optional.empty;
67+
import static org.gradlex.javamodule.dependencies.internal.utils.DependencyDeclarationsUtil.copyVersionConstraint;
6668
import static org.gradlex.javamodule.dependencies.internal.utils.ModuleInfo.Directive.REQUIRES_RUNTIME;
6769

6870
/**
@@ -280,7 +282,7 @@ private Provider<Dependency> createWithGuessing(String moduleName, SourceSet sou
280282
private @Nullable ModuleDependency createExternalDependency(String moduleName) {
281283
Provider<String> coordinates = getModuleNameToGA().getting(moduleName).orElse(mapByPrefix(getProviders().provider(() -> moduleName)));
282284
if (coordinates.isPresent()) {
283-
Map<String, Object> component;
285+
ExternalDependency component;
284286
String capability;
285287
if (coordinates.get().contains("|")) {
286288
String[] split = coordinates.get().split("\\|");
@@ -344,7 +346,7 @@ public Provider<String> gav(Provider<String> moduleName, Provider<String> versio
344346
* @return Dependency notation
345347
*/
346348
@SuppressWarnings("unused")
347-
public Provider<Map<String, Object>> gav(String moduleName) {
349+
public Provider<ExternalDependency> gav(String moduleName) {
348350
return ga(moduleName).map(ga -> findGav(ga, moduleName));
349351
}
350352

@@ -358,24 +360,19 @@ public Provider<Map<String, Object>> gav(String moduleName) {
358360
* @return Dependency notation
359361
*/
360362
@SuppressWarnings("unused")
361-
public Provider<Map<String, Object>> gav(Provider<String> moduleName) {
363+
public Provider<ExternalDependency> gav(Provider<String> moduleName) {
362364
return ga(moduleName).map(ga -> findGav(ga, moduleName.get()));
363365
}
364366

365-
private Map<String, Object> findGav(String ga, String moduleName) {
366-
VersionCatalog catalog = versionCatalogs == null ? null : versionCatalogs.find(getVersionCatalogName().get()).orElse(null);
367-
Optional<VersionConstraint> version = catalog == null ? empty() : catalog.findVersion(moduleName.replace('_', '.'));
368-
Map<String, Object> gav = new HashMap<>();
369-
String[] gaSplit = ga.split(":");
370-
if (gaSplit.length < 2) {
371-
throw new RuntimeException("Invalid mapping: " + moduleName + "="+ ga);
372-
}
373-
gav.put(GAV.GROUP, gaSplit[0]);
374-
gav.put(GAV.ARTIFACT, gaSplit[1]);
375-
version.ifPresent(versionConstraint -> gav.put(GAV.VERSION, versionConstraint));
376-
return gav;
367+
private ExternalDependency findGav(String ga, String moduleName) {
368+
Optional<VersionCatalog> catalog = versionCatalogs == null ? empty() : versionCatalogs.find(getVersionCatalogName().get());
369+
Optional<VersionConstraint> version = catalog.flatMap(versionCatalog -> versionCatalog.findVersion(moduleName.replace('_', '.')));
370+
ExternalDependency dependency = (ExternalDependency) getDependencies().create(ga);
371+
version.ifPresent(versionConstraint -> dependency.version(copy -> copyVersionConstraint(versionConstraint, copy)));
372+
return dependency;
377373
}
378374

375+
379376
/**
380377
* Finds the Module Name for given coordinates
381378
*

src/main/java/org/gradlex/javamodule/dependencies/internal/utils/DependencyDeclarationsUtil.java

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,9 @@
2020
import org.gradle.api.artifacts.ConfigurationContainer;
2121
import org.gradle.api.artifacts.Dependency;
2222
import org.gradle.api.artifacts.ModuleDependency;
23+
import org.gradle.api.artifacts.MutableVersionConstraint;
2324
import org.gradle.api.artifacts.ProjectDependency;
25+
import org.gradle.api.artifacts.VersionConstraint;
2426
import org.gradle.api.attributes.Category;
2527
import org.gradle.api.capabilities.Capability;
2628
import org.gradle.api.provider.Provider;
@@ -65,4 +67,28 @@ private static boolean isLibraryDependency(Dependency dependency) {
6567
}
6668
return false;
6769
}
70+
71+
/**
72+
* Fill a MutableVersionConstraint with the information from another VersionConstraint object retrieved
73+
* from a version catalog.
74+
*/
75+
public static void copyVersionConstraint(VersionConstraint version, MutableVersionConstraint copy) {
76+
String branch = version.getBranch();
77+
String requiredVersion = version.getRequiredVersion();
78+
String preferredVersion = version.getPreferredVersion();
79+
String strictVersion = version.getStrictVersion();
80+
81+
if (branch != null && !branch.isEmpty()) {
82+
copy.setBranch(branch);
83+
}
84+
if (!requiredVersion.isEmpty()) {
85+
copy.require(requiredVersion);
86+
}
87+
if (!preferredVersion.isEmpty()) {
88+
copy.prefer(preferredVersion);
89+
}
90+
if (!strictVersion.isEmpty()) {
91+
copy.strictly(strictVersion);
92+
}
93+
}
6894
}

0 commit comments

Comments
 (0)