This is an automated email from the ASF dual-hosted git repository.

stariy95 pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/cayenne.git

commit 004fb7668927c27fbae3a1fc385df8fb87fb33f3
Author: Nikita Timofeev <[email protected]>
AuthorDate: Mon May 11 16:52:23 2026 +0400

    CAY-2953 Upgrade Gradle to 9.4.0
---
 .claude/rules/cayenne-gradle-plugin/build-jdk.md   | 10 +++---
 .github/workflows/verify-deploy-on-push.yml        |  2 +-
 cayenne-gradle-plugin/build.gradle                 | 38 +++++++++-------------
 .../gradle/wrapper/gradle-wrapper.properties       |  2 +-
 cayenne-gradle-plugin/pom.xml                      | 13 +++++---
 .../java/org/apache/cayenne/tools/CgenTask.java    | 22 ++++++++++++-
 .../org/apache/cayenne/tools/GradlePlugin.java     | 19 +++--------
 .../apache/cayenne/tools/model/DbImportConfig.java |  7 ++--
 .../cayenne/tools/model/FilterContainer.java       | 19 ++++++++---
 .../cayenne/tools/model/SchemaContainer.java       |  7 ++--
 .../org/apache/cayenne/tools/GradlePluginIT.java   |  2 +-
 .../tools/dbimport-with-project-dependency.gradle  |  6 +---
 12 files changed, 78 insertions(+), 69 deletions(-)

diff --git a/.claude/rules/cayenne-gradle-plugin/build-jdk.md 
b/.claude/rules/cayenne-gradle-plugin/build-jdk.md
index fe4458c7b..c806fe7a3 100644
--- a/.claude/rules/cayenne-gradle-plugin/build-jdk.md
+++ b/.claude/rules/cayenne-gradle-plugin/build-jdk.md
@@ -5,11 +5,9 @@ description: cayenne-gradle-plugin Gradle version compatibility
 ---
 
 The `cayenne-gradle-plugin` integration tests run Gradle builds via 
`exec-maven-plugin`.
-Gradle 8.x does not support Java > 21.
+The module uses Gradle 9.4.0, which supports running on Java 21 through 26.
 
-CI excludes the module on Java 25+ by passing `--projects 
!cayenne-gradle-plugin`
-to Maven (see `verify-deploy-on-push.yml`). No pom changes are needed — Maven's
-built-in project exclusion handles it. Releases always use Java 21, so the 
module
-is always included there.
+CI includes this module on Java 21 and Java 25. The Maven enforcer in the 
module
+keeps the build aligned with Gradle's supported runtime range.
 
-The IT test (`GradlePluginIT`) tests Gradle 8.5 compatibility and only runs on 
Java 21.
+The IT test (`GradlePluginIT`) tests Gradle 9.4.0 compatibility.
diff --git a/.github/workflows/verify-deploy-on-push.yml 
b/.github/workflows/verify-deploy-on-push.yml
index 707cc92b9..bb9361b32 100644
--- a/.github/workflows/verify-deploy-on-push.yml
+++ b/.github/workflows/verify-deploy-on-push.yml
@@ -47,7 +47,7 @@ jobs:
           cache: 'maven'
 
       - name: mvn verify ${{ matrix.db-profile }}
-        run: mvn verify -q -DcayenneTestConnection=${{ matrix.db-profile }} 
-DcayenneLogLevel=ERROR ${{ matrix.jdk != 21 && '--projects 
!cayenne-gradle-plugin' || '' }}
+        run: mvn verify -q -DcayenneTestConnection=${{ matrix.db-profile }} 
-DcayenneLogLevel=ERROR
 
   deploy:
     needs: verify
diff --git a/cayenne-gradle-plugin/build.gradle 
b/cayenne-gradle-plugin/build.gradle
index 760ae9c50..06c34ae67 100644
--- a/cayenne-gradle-plugin/build.gradle
+++ b/cayenne-gradle-plugin/build.gradle
@@ -32,6 +32,9 @@ plugins {
 
 java {
     sourceCompatibility = JavaVersion.VERSION_21
+    targetCompatibility = JavaVersion.VERSION_21
+    withSourcesJar()
+    withJavadocJar()
 }
 
 repositories {
@@ -44,6 +47,10 @@ dependencies {
     implementation localGroovy()
 }
 
+test {
+    useJUnitPlatform()
+}
+
 def projectVersion = getProjectVersion()
 
 group = 'org.apache.cayenne.plugins'
@@ -69,24 +76,24 @@ if (classpathFile.file) {
 
 // Create file with cayenne-gradle-plugin version
 task versionFile {
-    def resourceOutputDir = file("$buildDir/resources/main/")
     doFirst {
+        def resourceOutputDir = 
layout.buildDirectory.dir('resources/main').get().asFile
         resourceOutputDir.exists() || resourceOutputDir.mkdirs()
         // file name must be in sync with GradleCayenneExtension
-        def file = file("$buildDir/resources/main/cayenne.version")
+        def file = 
layout.buildDirectory.file('resources/main/cayenne.version').get().asFile
         file.write(cayenneVersion.toString())
     }
 }
 
 def processLicenseFile(fileName) {
     def context = new VelocityContext(Map.of("binary", false))
-    def outputWriter = new FileWriter(new 
File("$buildDir/resources/main/META-INF/cayenne/${fileName}.txt"))
+    def outputWriter = new 
FileWriter(layout.buildDirectory.file("resources/main/META-INF/cayenne/${fileName}.txt").get().asFile)
     def template
-    def templateFile = new 
File("$buildDir/resources/tpl/META-INF/cayenne/${fileName}.txt.vm");
+    def templateFile = 
layout.buildDirectory.file("resources/tpl/META-INF/cayenne/${fileName}.txt.vm").get().asFile
     if(templateFile.exists()) {
         template = templateFile.text
     } else {
-        throw new RuntimeException("Template file 
`$buildDir/resources/tpl/META-INF/cayenne/${fileName}.txt.vm` doesn't exist")
+        throw new RuntimeException("Template file `${templateFile}` doesn't 
exist")
     }
 
     try {
@@ -100,28 +107,13 @@ def processLicenseFile(fileName) {
 // Copy license and notice files
 task licenseFiles(type: Copy) {
     from '../build-tools/cayenne-legal/src/main/resources/'
-    into "$buildDir/resources/tpl/"
+    into layout.buildDirectory.dir('resources/tpl')
     doLast {
-        mkdir("$buildDir/resources/main/META-INF/cayenne/")
+        
layout.buildDirectory.dir('resources/main/META-INF/cayenne').get().asFile.mkdirs()
         processLicenseFile("LICENSE")
         processLicenseFile("NOTICE")
     }
 }
 
-task sourcesJar(type: Jar, dependsOn: classes) {
-    archiveClassifier = 'sources'
-    from sourceSets.main.allSource
-}
-
-task javadocJar(type: Jar, dependsOn: javadoc) {
-    archiveClassifier = 'javadoc'
-    from javadoc.destinationDir
-}
-
-artifacts {
-    archives sourcesJar
-    archives javadocJar
-}
-
 processResources.dependsOn licenseFiles
-processResources.dependsOn versionFile
\ No newline at end of file
+processResources.dependsOn versionFile
diff --git a/cayenne-gradle-plugin/gradle/wrapper/gradle-wrapper.properties 
b/cayenne-gradle-plugin/gradle/wrapper/gradle-wrapper.properties
index 7da9bf257..e37728236 100644
--- a/cayenne-gradle-plugin/gradle/wrapper/gradle-wrapper.properties
+++ b/cayenne-gradle-plugin/gradle/wrapper/gradle-wrapper.properties
@@ -15,7 +15,7 @@
 
 distributionBase=GRADLE_USER_HOME
 distributionPath=wrapper/dists
-distributionUrl=https\://services.gradle.org/distributions/gradle-8.14.3-bin.zip
+distributionUrl=https\://services.gradle.org/distributions/gradle-9.4.0-bin.zip
 networkTimeout=10000
 validateDistributionUrl=true
 zipStoreBase=GRADLE_USER_HOME
diff --git a/cayenne-gradle-plugin/pom.xml b/cayenne-gradle-plugin/pom.xml
index 6c551976d..ccf07f53e 100644
--- a/cayenne-gradle-plugin/pom.xml
+++ b/cayenne-gradle-plugin/pom.xml
@@ -69,15 +69,15 @@
                 <artifactId>maven-enforcer-plugin</artifactId>
                 <executions>
                     <execution>
-                        <id>enforce-jdk21</id>
+                        <id>enforce-gradle-jdk</id>
                         <goals>
                             <goal>enforce</goal>
                         </goals>
                         <configuration>
                             <rules>
                                 <requireJavaVersion>
-                                    <version>[21,22)</version>
-                                    <message>cayenne-gradle-plugin requires 
JDK 21 (Gradle 8.x does not support Java &gt; 21). Use JDK 21 to build this 
module.</message>
+                                    <version>[21,27)</version>
+                                    <message>cayenne-gradle-plugin requires 
JDK 21 through 26 to match Gradle 9.4.0 runtime support.</message>
                                 </requireJavaVersion>
                             </rules>
                         </configuration>
@@ -169,6 +169,11 @@
             <artifactId>junit-jupiter</artifactId>
             <scope>test</scope>
         </dependency>
+        <dependency>
+            <groupId>org.junit.platform</groupId>
+            <artifactId>junit-platform-launcher</artifactId>
+            <scope>test</scope>
+        </dependency>
         <dependency>
             <groupId>org.mockito</groupId>
             <artifactId>mockito-core</artifactId>
@@ -177,4 +182,4 @@
     </dependencies>
 
 
-</project>
\ No newline at end of file
+</project>
diff --git 
a/cayenne-gradle-plugin/src/main/java/org/apache/cayenne/tools/CgenTask.java 
b/cayenne-gradle-plugin/src/main/java/org/apache/cayenne/tools/CgenTask.java
index 35f553856..b5100bf00 100644
--- a/cayenne-gradle-plugin/src/main/java/org/apache/cayenne/tools/CgenTask.java
+++ b/cayenne-gradle-plugin/src/main/java/org/apache/cayenne/tools/CgenTask.java
@@ -571,10 +571,15 @@ public class CgenTask extends BaseCayenneTask {
         setExcludeEmbeddables(excludeEmbeddables);
     }
 
+    @Internal
     public Boolean isMakePairs() {
         return makePairs;
     }
 
+    public Boolean getMakePairs() {
+        return makePairs;
+    }
+
     public void setMakePairs(Boolean makePairs) {
         this.makePairs = makePairs;
     }
@@ -607,10 +612,15 @@ public class CgenTask extends BaseCayenneTask {
         setOutputPattern(outputPattern);
     }
 
+    @Internal
     public Boolean isOverwrite() {
         return overwrite;
     }
 
+    public Boolean getOverwrite() {
+        return overwrite;
+    }
+
     public void setOverwrite(Boolean overwrite) {
         this.overwrite = overwrite;
     }
@@ -679,10 +689,15 @@ public class CgenTask extends BaseCayenneTask {
         setEmbeddableTemplate(embeddableTemplate);
     }
 
+    @Internal
     public Boolean isUsePkgPath() {
         return usePkgPath;
     }
 
+    public Boolean getUsePkgPath() {
+        return usePkgPath;
+    }
+
     public void setUsePkgPath(Boolean usePkgPath) {
         this.usePkgPath = usePkgPath;
     }
@@ -691,10 +706,15 @@ public class CgenTask extends BaseCayenneTask {
         setUsePkgPath(usePkgPath);
     }
 
+    @Internal
     public Boolean isCreatePropertyNames() {
         return createPropertyNames;
     }
 
+    public Boolean getCreatePropertyNames() {
+        return createPropertyNames;
+    }
+
     public void setCreatePropertyNames(Boolean createPropertyNames) {
         this.createPropertyNames = createPropertyNames;
     }
@@ -730,4 +750,4 @@ public class CgenTask extends BaseCayenneTask {
     public void externalToolConfig(String externalToolConfig) {
         setExternalToolConfig(externalToolConfig);
     }
-}
\ No newline at end of file
+}
diff --git 
a/cayenne-gradle-plugin/src/main/java/org/apache/cayenne/tools/GradlePlugin.java
 
b/cayenne-gradle-plugin/src/main/java/org/apache/cayenne/tools/GradlePlugin.java
index 0688977cf..d702e54e4 100644
--- 
a/cayenne-gradle-plugin/src/main/java/org/apache/cayenne/tools/GradlePlugin.java
+++ 
b/cayenne-gradle-plugin/src/main/java/org/apache/cayenne/tools/GradlePlugin.java
@@ -19,9 +19,6 @@
 
 package org.apache.cayenne.tools;
 
-import java.util.HashMap;
-import java.util.Map;
-
 import org.gradle.api.Plugin;
 import org.gradle.api.Project;
 
@@ -31,16 +28,8 @@ public class GradlePlugin implements Plugin<Project> {
         project.getExtensions().create("cayenne", 
GradleCayenneExtension.class, project);
 
         // Register tasks
-        Map<String, Object> map = new HashMap<>(1);
-        map.put("type", CgenTask.class);
-        project.task(map, "cgen");
-
-        Map<String, Object> map1 = new HashMap<>(1);
-        map1.put("type", DbImportTask.class);
-        project.task(map1, "cdbimport");
-
-        Map<String, Object> map2 = new HashMap<>(1);
-        map2.put("type", DbGenerateTask.class);
-        project.task(map2, "cdbgen");
+        project.getTasks().register("cgen", CgenTask.class);
+        project.getTasks().register("cdbimport", DbImportTask.class);
+        project.getTasks().register("cdbgen", DbGenerateTask.class);
     }
-}
\ No newline at end of file
+}
diff --git 
a/cayenne-gradle-plugin/src/main/java/org/apache/cayenne/tools/model/DbImportConfig.java
 
b/cayenne-gradle-plugin/src/main/java/org/apache/cayenne/tools/model/DbImportConfig.java
index 9c2ed0864..23b4cc5aa 100644
--- 
a/cayenne-gradle-plugin/src/main/java/org/apache/cayenne/tools/model/DbImportConfig.java
+++ 
b/cayenne-gradle-plugin/src/main/java/org/apache/cayenne/tools/model/DbImportConfig.java
@@ -26,7 +26,6 @@ import java.util.LinkedList;
 import groovy.lang.Closure;
 import org.apache.cayenne.dbsync.reverse.dbimport.ReverseEngineering;
 import org.apache.cayenne.dbsync.reverse.dbimport.Schema;
-import org.gradle.util.ConfigureUtil;
 
 /**
  * @since 4.0
@@ -117,11 +116,11 @@ public class DbImportConfig extends SchemaContainer {
     }
 
     public void catalog(Closure<?> closure) {
-        catalogs.add(ConfigureUtil.configure(closure, new SchemaContainer()));
+        catalogs.add(configure(closure, new SchemaContainer()));
     }
 
     public void catalog(String name, Closure<?> closure) {
-        catalogs.add(ConfigureUtil.configure(closure, new 
SchemaContainer(name)));
+        catalogs.add(configure(closure, new SchemaContainer(name)));
     }
 
     public ReverseEngineering toReverseEngineering() {
@@ -286,4 +285,4 @@ public class DbImportConfig extends SchemaContainer {
     public void tableTypes(String... tableTypes) {
         this.tableTypes.addAll(Arrays.asList(tableTypes));
     }
-}
\ No newline at end of file
+}
diff --git 
a/cayenne-gradle-plugin/src/main/java/org/apache/cayenne/tools/model/FilterContainer.java
 
b/cayenne-gradle-plugin/src/main/java/org/apache/cayenne/tools/model/FilterContainer.java
index c214976b5..5d3bcf40e 100644
--- 
a/cayenne-gradle-plugin/src/main/java/org/apache/cayenne/tools/model/FilterContainer.java
+++ 
b/cayenne-gradle-plugin/src/main/java/org/apache/cayenne/tools/model/FilterContainer.java
@@ -23,7 +23,6 @@ import java.util.Collection;
 import java.util.LinkedList;
 
 import groovy.lang.Closure;
-import org.gradle.util.ConfigureUtil;
 
 /**
  * @since 4.0
@@ -55,11 +54,11 @@ public class FilterContainer {
     }
 
     public void includeTable(Closure<?> closure) {
-        includeTables.add(ConfigureUtil.configure(closure, new 
IncludeTable()));
+        includeTables.add(configure(closure, new IncludeTable()));
     }
 
     public void includeTable(String pattern, Closure<?> closure) {
-        includeTables.add(ConfigureUtil.configure(closure, new 
IncludeTable(pattern)));
+        includeTables.add(configure(closure, new IncludeTable(pattern)));
     }
 
     public void includeTables(String... patterns) {
@@ -140,6 +139,18 @@ public class FilterContainer {
         collection.add(new PatternParam(name));
     }
 
+    static <T> T configure(Closure<?> closure, T target) {
+        Closure<?> clonedClosure = (Closure<?>) closure.clone();
+        clonedClosure.setDelegate(target);
+        clonedClosure.setResolveStrategy(Closure.DELEGATE_FIRST);
+        if (clonedClosure.getMaximumNumberOfParameters() == 0) {
+            clonedClosure.call();
+        } else {
+            clonedClosure.call(target);
+        }
+        return target;
+    }
+
     <C extends org.apache.cayenne.dbsync.reverse.dbimport.FilterContainer> C 
fillContainer(final C container) {
         container.setName(name);
         for(IncludeTable table : includeTables) {
@@ -176,4 +187,4 @@ public class FilterContainer {
         this.name = name;
     }
 
-}
\ No newline at end of file
+}
diff --git 
a/cayenne-gradle-plugin/src/main/java/org/apache/cayenne/tools/model/SchemaContainer.java
 
b/cayenne-gradle-plugin/src/main/java/org/apache/cayenne/tools/model/SchemaContainer.java
index 4c4e01593..d6d92e865 100644
--- 
a/cayenne-gradle-plugin/src/main/java/org/apache/cayenne/tools/model/SchemaContainer.java
+++ 
b/cayenne-gradle-plugin/src/main/java/org/apache/cayenne/tools/model/SchemaContainer.java
@@ -25,7 +25,6 @@ import java.util.LinkedList;
 import groovy.lang.Closure;
 import org.apache.cayenne.dbsync.reverse.dbimport.Catalog;
 import org.apache.cayenne.dbsync.reverse.dbimport.Schema;
-import org.gradle.util.ConfigureUtil;
 
 /**
  * @since 4.0
@@ -46,11 +45,11 @@ public class SchemaContainer extends FilterContainer {
     }
 
     public void schema(Closure<?> closure) {
-        schemas.add(ConfigureUtil.configure(closure, new FilterContainer()));
+        schemas.add(configure(closure, new FilterContainer()));
     }
 
     public void schema(String name, Closure<?> closure) {
-        schemas.add(ConfigureUtil.configure(closure, new 
FilterContainer(name)));
+        schemas.add(configure(closure, new FilterContainer(name)));
     }
 
     Catalog toCatalog() {
@@ -60,4 +59,4 @@ public class SchemaContainer extends FilterContainer {
         }
         return catalog;
     }
-}
\ No newline at end of file
+}
diff --git 
a/cayenne-gradle-plugin/src/test/java/org/apache/cayenne/tools/GradlePluginIT.java
 
b/cayenne-gradle-plugin/src/test/java/org/apache/cayenne/tools/GradlePluginIT.java
index 4fa12f9ba..12be7310b 100644
--- 
a/cayenne-gradle-plugin/src/test/java/org/apache/cayenne/tools/GradlePluginIT.java
+++ 
b/cayenne-gradle-plugin/src/test/java/org/apache/cayenne/tools/GradlePluginIT.java
@@ -51,7 +51,7 @@ public class GradlePluginIT extends BaseTaskIT {
     @Test
     public void gradleVersionsCompatibility() {
 
-        String[] versions = {"8.5"};
+        String[] versions = {"9.4.0"};
 
         List<String> failedVersions = new ArrayList<>();
         for(String version : versions) {
diff --git 
a/cayenne-gradle-plugin/src/test/resources/org/apache/cayenne/tools/dbimport-with-project-dependency.gradle
 
b/cayenne-gradle-plugin/src/test/resources/org/apache/cayenne/tools/dbimport-with-project-dependency.gradle
index f6c043031..1d7d0603e 100644
--- 
a/cayenne-gradle-plugin/src/test/resources/org/apache/cayenne/tools/dbimport-with-project-dependency.gradle
+++ 
b/cayenne-gradle-plugin/src/test/resources/org/apache/cayenne/tools/dbimport-with-project-dependency.gradle
@@ -38,11 +38,7 @@ dependencies {
     implementation 'mysql:mysql-connector-java:6.0.5'
 }
 
-configurations {
-    project.configurations.getByName("implementation").setCanBeResolved(true)
-}
-
 repositories {
     mavenLocal()
     mavenCentral()
-}
\ No newline at end of file
+}

Reply via email to