From 840a38d1a5ae2c1cd7a7f666f4d2a1a725323234 Mon Sep 17 00:00:00 2001 From: Jendrik Johannes Date: Wed, 17 Sep 2025 12:31:41 +0200 Subject: [PATCH 1/5] Update to Gradle 9.1.0 RC4 --- gradle/wrapper/gradle-wrapper.properties | 4 ++-- gradlew | 3 --- gradlew.bat | 3 +-- 3 files changed, 3 insertions(+), 7 deletions(-) diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties index 3e781fb..81991ea 100644 --- a/gradle/wrapper/gradle-wrapper.properties +++ b/gradle/wrapper/gradle-wrapper.properties @@ -1,7 +1,7 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists -distributionSha256Sum=8fad3d78296ca518113f3d29016617c7f9367dc005f932bd9d93bf45ba46072b -distributionUrl=https\://services.gradle.org/distributions/gradle-9.0.0-bin.zip +distributionSha256Sum=91b3bb52f09bab37df8f922d47d7df6ba76c00a52494a75feafad956f4d2a360 +distributionUrl=https\://services.gradle.org/distributions/gradle-9.1.0-rc-4-bin.zip networkTimeout=10000 validateDistributionUrl=true zipStoreBase=GRADLE_USER_HOME diff --git a/gradlew b/gradlew index ef07e01..adff685 100755 --- a/gradlew +++ b/gradlew @@ -114,7 +114,6 @@ case "$( uname )" in #( NONSTOP* ) nonstop=true ;; esac -CLASSPATH="\\\"\\\"" # Determine the Java command to use to start the JVM. @@ -172,7 +171,6 @@ fi # For Cygwin or MSYS, switch paths to Windows format before running java if "$cygwin" || "$msys" ; then APP_HOME=$( cygpath --path --mixed "$APP_HOME" ) - CLASSPATH=$( cygpath --path --mixed "$CLASSPATH" ) JAVACMD=$( cygpath --unix "$JAVACMD" ) @@ -212,7 +210,6 @@ DEFAULT_JVM_OPTS='"-Xmx64m" "-Xms64m"' set -- \ "-Dorg.gradle.appname=$APP_BASE_NAME" \ - -classpath "$CLASSPATH" \ -jar "$APP_HOME/gradle/wrapper/gradle-wrapper.jar" \ "$@" diff --git a/gradlew.bat b/gradlew.bat index 5eed7ee..e509b2d 100644 --- a/gradlew.bat +++ b/gradlew.bat @@ -70,11 +70,10 @@ goto fail :execute @rem Setup the command line -set CLASSPATH= @rem Execute Gradle -"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" -jar "%APP_HOME%\gradle\wrapper\gradle-wrapper.jar" %* +"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -jar "%APP_HOME%\gradle\wrapper\gradle-wrapper.jar" %* :end @rem End local scope for the variables with windows NT shell From 068ab629641f9b2605e946d55c6a55090b7a1859 Mon Sep 17 00:00:00 2001 From: Jendrik Johannes Date: Wed, 17 Sep 2025 12:31:58 +0200 Subject: [PATCH 2/5] Fail tests if they trigger a deprecation warning --- .../javamodule/dependencies/test/fixture/GradleBuild.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/test/java/org/gradlex/javamodule/dependencies/test/fixture/GradleBuild.java b/src/test/java/org/gradlex/javamodule/dependencies/test/fixture/GradleBuild.java index 0be9e49..ffd1ac4 100644 --- a/src/test/java/org/gradlex/javamodule/dependencies/test/fixture/GradleBuild.java +++ b/src/test/java/org/gradlex/javamodule/dependencies/test/fixture/GradleBuild.java @@ -136,7 +136,7 @@ public GradleRunner runner(boolean projectIsolation, String... args) { ); Stream standardArgs = Stream.of( "-s", - "--warning-mode=all", + "--warning-mode=fail", "-Porg.gradlex.java-module-dependencies.register-help-tasks=" + withHelpTasks ); GradleRunner runner = GradleRunner.create() From 7ca323a965626f9539ee44f1597e152085964615 Mon Sep 17 00:00:00 2001 From: Jendrik Johannes Date: Wed, 17 Sep 2025 12:44:56 +0200 Subject: [PATCH 3/5] Add changelog entry --- CHANGELOG.md | 1 + 1 file changed, 1 insertion(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 3b3f72d..61c1379 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,6 +1,7 @@ # Java Module Dependencies Gradle Plugin - Changelog ## Version 1.10 +* [#235](https://github.com/gradlex-org/java-module-dependencies/issues/235) Upgrade to Gradle 9.1, address deprecation * [#221](https://github.com/gradlex-org/java-module-dependencies/issues/221) Upgrade to Gradle 9, remove deprecated features * [#209](https://github.com/gradlex-org/java-module-dependencies/issues/209) Fix: configuration cache issue when building kotlin-dsl plugins * Update module name mappings From 66303a2a841ad971192b5c0e9394242b31051978 Mon Sep 17 00:00:00 2001 From: Jendrik Johannes Date: Wed, 17 Sep 2025 12:45:04 +0200 Subject: [PATCH 4/5] Create a proper ExternalDependency object instead of a "GAV" Map This addresses: Declaring dependencies using multi-string notation has been deprecated. --- .../gradlex/javamodule/dependencies/GAV.java | 23 ---------------- .../JavaModuleDependenciesExtension.java | 27 +++++++++---------- .../utils/DependencyDeclarationsUtil.java | 26 ++++++++++++++++++ 3 files changed, 38 insertions(+), 38 deletions(-) delete mode 100644 src/main/java/org/gradlex/javamodule/dependencies/GAV.java diff --git a/src/main/java/org/gradlex/javamodule/dependencies/GAV.java b/src/main/java/org/gradlex/javamodule/dependencies/GAV.java deleted file mode 100644 index fdc973e..0000000 --- a/src/main/java/org/gradlex/javamodule/dependencies/GAV.java +++ /dev/null @@ -1,23 +0,0 @@ -/* - * Copyright the GradleX team. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package org.gradlex.javamodule.dependencies; - -interface GAV { - String GROUP = "group"; - String ARTIFACT = "name"; - String VERSION = "version"; -} diff --git a/src/main/java/org/gradlex/javamodule/dependencies/JavaModuleDependenciesExtension.java b/src/main/java/org/gradlex/javamodule/dependencies/JavaModuleDependenciesExtension.java index f822b0a..6e89643 100644 --- a/src/main/java/org/gradlex/javamodule/dependencies/JavaModuleDependenciesExtension.java +++ b/src/main/java/org/gradlex/javamodule/dependencies/JavaModuleDependenciesExtension.java @@ -20,6 +20,7 @@ import org.gradle.api.artifacts.Configuration; import org.gradle.api.artifacts.ConfigurationContainer; import org.gradle.api.artifacts.Dependency; +import org.gradle.api.artifacts.ExternalDependency; import org.gradle.api.artifacts.ModuleDependency; import org.gradle.api.artifacts.ProjectDependency; import org.gradle.api.artifacts.VersionCatalog; @@ -63,6 +64,7 @@ import java.util.stream.Collectors; import static java.util.Optional.empty; +import static org.gradlex.javamodule.dependencies.internal.utils.DependencyDeclarationsUtil.copyVersionConstraint; import static org.gradlex.javamodule.dependencies.internal.utils.ModuleInfo.Directive.REQUIRES_RUNTIME; /** @@ -280,7 +282,7 @@ private Provider createWithGuessing(String moduleName, SourceSet sou private @Nullable ModuleDependency createExternalDependency(String moduleName) { Provider coordinates = getModuleNameToGA().getting(moduleName).orElse(mapByPrefix(getProviders().provider(() -> moduleName))); if (coordinates.isPresent()) { - Map component; + ExternalDependency component; String capability; if (coordinates.get().contains("|")) { String[] split = coordinates.get().split("\\|"); @@ -344,7 +346,7 @@ public Provider gav(Provider moduleName, Provider versio * @return Dependency notation */ @SuppressWarnings("unused") - public Provider> gav(String moduleName) { + public Provider gav(String moduleName) { return ga(moduleName).map(ga -> findGav(ga, moduleName)); } @@ -358,24 +360,19 @@ public Provider> gav(String moduleName) { * @return Dependency notation */ @SuppressWarnings("unused") - public Provider> gav(Provider moduleName) { + public Provider gav(Provider moduleName) { return ga(moduleName).map(ga -> findGav(ga, moduleName.get())); } - private Map findGav(String ga, String moduleName) { - VersionCatalog catalog = versionCatalogs == null ? null : versionCatalogs.find(getVersionCatalogName().get()).orElse(null); - Optional version = catalog == null ? empty() : catalog.findVersion(moduleName.replace('_', '.')); - Map gav = new HashMap<>(); - String[] gaSplit = ga.split(":"); - if (gaSplit.length < 2) { - throw new RuntimeException("Invalid mapping: " + moduleName + "="+ ga); - } - gav.put(GAV.GROUP, gaSplit[0]); - gav.put(GAV.ARTIFACT, gaSplit[1]); - version.ifPresent(versionConstraint -> gav.put(GAV.VERSION, versionConstraint)); - return gav; + private ExternalDependency findGav(String ga, String moduleName) { + Optional catalog = versionCatalogs == null ? empty() : versionCatalogs.find(getVersionCatalogName().get()); + Optional version = catalog.flatMap(versionCatalog -> versionCatalog.findVersion(moduleName.replace('_', '.'))); + ExternalDependency dependency = (ExternalDependency) getDependencies().create(ga); + version.ifPresent(versionConstraint -> dependency.version(copy -> copyVersionConstraint(versionConstraint, copy))); + return dependency; } + /** * Finds the Module Name for given coordinates * diff --git a/src/main/java/org/gradlex/javamodule/dependencies/internal/utils/DependencyDeclarationsUtil.java b/src/main/java/org/gradlex/javamodule/dependencies/internal/utils/DependencyDeclarationsUtil.java index 95d619a..30d5a95 100644 --- a/src/main/java/org/gradlex/javamodule/dependencies/internal/utils/DependencyDeclarationsUtil.java +++ b/src/main/java/org/gradlex/javamodule/dependencies/internal/utils/DependencyDeclarationsUtil.java @@ -20,7 +20,9 @@ import org.gradle.api.artifacts.ConfigurationContainer; import org.gradle.api.artifacts.Dependency; import org.gradle.api.artifacts.ModuleDependency; +import org.gradle.api.artifacts.MutableVersionConstraint; import org.gradle.api.artifacts.ProjectDependency; +import org.gradle.api.artifacts.VersionConstraint; import org.gradle.api.attributes.Category; import org.gradle.api.capabilities.Capability; import org.gradle.api.provider.Provider; @@ -65,4 +67,28 @@ private static boolean isLibraryDependency(Dependency dependency) { } return false; } + + /** + * Fill a MutableVersionConstraint with the information from another VersionConstraint object retrieved + * from a version catalog. + */ + public static void copyVersionConstraint(VersionConstraint version, MutableVersionConstraint copy) { + String branch = version.getBranch(); + String requiredVersion = version.getRequiredVersion(); + String preferredVersion = version.getPreferredVersion(); + String strictVersion = version.getStrictVersion(); + + if (branch != null && !branch.isEmpty()) { + copy.setBranch(branch); + } + if (!requiredVersion.isEmpty()) { + copy.require(requiredVersion); + } + if (!preferredVersion.isEmpty()) { + copy.prefer(preferredVersion); + } + if (!strictVersion.isEmpty()) { + copy.strictly(strictVersion); + } + } } From 8f18fb369cc10eba1d7b6e1e67c26de633238c3b Mon Sep 17 00:00:00 2001 From: Jendrik Johannes Date: Wed, 17 Sep 2025 13:47:46 +0200 Subject: [PATCH 5/5] Adjust test to not trigger deprecation in Gradle 7.x --- .../javamodule/dependencies/test/CustomizationTest.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/test/java/org/gradlex/javamodule/dependencies/test/CustomizationTest.java b/src/test/java/org/gradlex/javamodule/dependencies/test/CustomizationTest.java index bb9fb92..cf5cad0 100644 --- a/src/test/java/org/gradlex/javamodule/dependencies/test/CustomizationTest.java +++ b/src/test/java/org/gradlex/javamodule/dependencies/test/CustomizationTest.java @@ -87,12 +87,12 @@ void can_add_custom_mapping_via_properties_file_in_custom_location() { @Test void can_use_custom_catalog() { build.settingsFile.appendText(""" - dependencyResolutionManagement.versionCatalogs.create("modules") { + dependencyResolutionManagement.versionCatalogs.create("moduleLibs") { version("org.apache.xmlbeans", "5.0.1") version("com.fasterxml.jackson.databind", "2.12.5") }"""); build.appBuildFile.appendText(""" - javaModuleDependencies.versionCatalogName.set("modules")"""); + javaModuleDependencies.versionCatalogName.set("moduleLibs")"""); build.appModuleInfoFile.writeText(""" module org.gradlex.test.app { requires com.fasterxml.jackson.databind;