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

benw pushed a commit to branch gradle-improvements
in repository https://gitbox.apache.org/repos/asf/tapestry-5.git

commit 0d1861866a0d5c604a7ea24a0bdee5bdae28d7c6
Author: Ben Weidig <b...@netzgut.net>
AuthorDate: Sun Aug 3 16:37:38 2025 +0200

    TAP5-2809: build.gradle files streamlined, version catalog
---
 5_10_RELEASE_NOTES.md                              |  6 ++
 beanmodel/build.gradle                             | 13 ++-
 .../main/groovy/tapestry.java-convention.gradle    | 10 +--
 .../tapestry.junit4-legacy-convention.gradle       |  2 +-
 .../src/main/groovy/tapestry.ssh-convention.gradle |  2 +-
 .../main/groovy/tapestry.testng-convention.gradle  |  2 +-
 commons/build.gradle                               | 10 +--
 genericsresolver-guava/build.gradle                |  6 +-
 quickstart/build.gradle                            | 32 ++++----
 tapestry-beanvalidator/build.gradle                | 14 ++--
 tapestry-cdi/build.gradle                          | 94 +++++++++++-----------
 tapestry-clojure/build.gradle                      | 13 +--
 tapestry-core/build.gradle                         |  8 +-
 tapestry-hibernate-core/build.gradle               |  6 +-
 tapestry-hibernate/build.gradle                    |  2 +-
 tapestry-ioc-jcache/build.gradle                   |  6 +-
 tapestry-javadoc/build.gradle                      |  2 +-
 tapestry-jmx/build.gradle                          |  6 +-
 tapestry-jpa/build.gradle                          | 10 ++-
 tapestry-json/build.gradle                         |  7 +-
 tapestry-kaptcha/build.gradle                      |  6 +-
 tapestry-latest-java-tests/build.gradle            |  5 +-
 tapestry-mongodb/build.gradle                      |  6 +-
 tapestry-openapi-viewer/build.gradle               |  8 +-
 tapestry-rest-jackson/build.gradle                 | 13 +--
 tapestry-runner/build.gradle                       |  2 +-
 tapestry-spock/build.gradle                        |  2 -
 tapestry-spring/build.gradle                       | 12 ++-
 tapestry-test/build.gradle                         |  2 +-
 tapestry-upload/build.gradle                       |  6 +-
 tapestry-version-migrator/build.gradle             |  6 +-
 tapestry-webresources/build.gradle                 | 10 ++-
 32 files changed, 184 insertions(+), 145 deletions(-)

diff --git a/5_10_RELEASE_NOTES.md b/5_10_RELEASE_NOTES.md
index e7d1c36da..227915b73 100644
--- a/5_10_RELEASE_NOTES.md
+++ b/5_10_RELEASE_NOTES.md
@@ -22,3 +22,9 @@ Scratch pad for changes destined for the 5.10.0 release notes 
page.
 
 
 # Overall notes
+
+* Gradle overhaul
+    * 8.5 -> 8.14.2
+    * Version catalogs
+    * Conventions
+    * ...
diff --git a/beanmodel/build.gradle b/beanmodel/build.gradle
index 09b48b253..3e5ec01fe 100644
--- a/beanmodel/build.gradle
+++ b/beanmodel/build.gradle
@@ -3,21 +3,20 @@ plugins {
     id 'antlr'
 }
 
-description = "Fast class property discovery, reading and writing library 
based on bytecode generation. Extracted from Apache Tapestry, but not dependent 
on the Web framework (tapestry-core) nor the IoC one (tapestry-ioc)."
-
+description = 'Fast class property discovery, reading and writing library 
based on bytecode generation. Extracted from Apache Tapestry, but not dependent 
on the Web framework (tapestry-core) nor the IoC one (tapestry-ioc).'
 
 dependencies {
-    implementation project(":plastic")
-    implementation project(":tapestry5-annotations")
-    implementation project(":commons")
+    implementation project(':plastic')
+    implementation project(':tapestry5-annotations')
+    implementation project(':commons')
 
     implementation libs.slf4j.api
 
     antlr libs.antlr
 
     // Transitive will bring in the unwanted string template library as well
-    implementation libs.antlr.runtime, {
-        exclude group: "org.antlr", module: "stringtemplate"
+    implementation(libs.antlr.runtime) {
+        exclude group: 'org.antlr', module: 'stringtemplate'
     }
 
     testImplementation platform(libs.spock.bom)
diff --git a/buildSrc/src/main/groovy/tapestry.java-convention.gradle 
b/buildSrc/src/main/groovy/tapestry.java-convention.gradle
index bcb003d4a..b94a82142 100644
--- a/buildSrc/src/main/groovy/tapestry.java-convention.gradle
+++ b/buildSrc/src/main/groovy/tapestry.java-convention.gradle
@@ -53,14 +53,14 @@ dependencies {
 tasks.withType(Jar).configureEach {
     // Include license/notice files in the final JAR.
     from(project.projectDir) {
-        include "*.txt"
-        into "META-INF"
+        include '*.txt'
+        into 'META-INF'
     }
 
     // JPMS compatibility
     manifest {
-        attributes("Automatic-Module-Name": "org.apache.tapestry." + 
project.name
-        .replace("tapestry-", "")
-        .replace("-", "."))
+        attributes("Automatic-Module-Name": 
"org.apache.tapestry.${project.name}"
+        .replace('tapestry-', '')
+        .replace('-', '.'))
     }
 }
diff --git a/buildSrc/src/main/groovy/tapestry.junit4-legacy-convention.gradle 
b/buildSrc/src/main/groovy/tapestry.junit4-legacy-convention.gradle
index de7f4e9bf..436efdc53 100644
--- a/buildSrc/src/main/groovy/tapestry.junit4-legacy-convention.gradle
+++ b/buildSrc/src/main/groovy/tapestry.junit4-legacy-convention.gradle
@@ -9,4 +9,4 @@ dependencies {
 
 tasks.withType(Test).configureEach {
     useJUnit()
-}
\ No newline at end of file
+}
diff --git a/buildSrc/src/main/groovy/tapestry.ssh-convention.gradle 
b/buildSrc/src/main/groovy/tapestry.ssh-convention.gradle
index 0a66e2636..2f6aa7c8a 100644
--- a/buildSrc/src/main/groovy/tapestry.ssh-convention.gradle
+++ b/buildSrc/src/main/groovy/tapestry.ssh-convention.gradle
@@ -12,4 +12,4 @@ dependencies {
 // Configure all SshTask instances to use the files from the configuration
 tasks.withType(SshTask).configureEach {
     it.sshAntClasspath = configurations.sshAntTask
-}
\ No newline at end of file
+}
diff --git a/buildSrc/src/main/groovy/tapestry.testng-convention.gradle 
b/buildSrc/src/main/groovy/tapestry.testng-convention.gradle
index 2962c3670..90dac3640 100644
--- a/buildSrc/src/main/groovy/tapestry.testng-convention.gradle
+++ b/buildSrc/src/main/groovy/tapestry.testng-convention.gradle
@@ -24,4 +24,4 @@ tasks.withType(Test).configureEach { testTask ->
     } else {
         testTask.useTestNG()
     }
-}
\ No newline at end of file
+}
diff --git a/commons/build.gradle b/commons/build.gradle
index cf5bec443..ecc9bf194 100644
--- a/commons/build.gradle
+++ b/commons/build.gradle
@@ -2,11 +2,11 @@ plugins {
     id 'tapestry.junit5-spock-convention'
 }
 
-description = "Project including common classes for tapestry-core, 
tapestry-ioc and beanmodel."
-
+description = 'Project including common classes for tapestry-core, 
tapestry-ioc and beanmodel.'
 
 dependencies {
-    api project(":plastic")
-    api project(":tapestry5-annotations")
-    implementation project(":tapestry-func")
+    api project(':plastic')
+    api project(':tapestry5-annotations')
+
+    implementation project(':tapestry-func')
 }
diff --git a/genericsresolver-guava/build.gradle 
b/genericsresolver-guava/build.gradle
index 9fa32c2cf..90892270a 100644
--- a/genericsresolver-guava/build.gradle
+++ b/genericsresolver-guava/build.gradle
@@ -3,14 +3,10 @@ plugins {
 }
 description = "Replaces the Tapestry Commons's own Java Generics resolution 
code with the one from Google Guava's one"
 
-def moduleLibs = [
-    guava: 'com.google.guava:guava:27.0.1-jre',
-]
-
 dependencies {
     implementation project(':commons')
 
-    provided moduleLibs.guava
+    provided libs.guava
 
     testImplementation project(':tapestry-core')
     testImplementation project(':tapestry-test')
diff --git a/quickstart/build.gradle b/quickstart/build.gradle
index 8e6de1418..6d300bb24 100644
--- a/quickstart/build.gradle
+++ b/quickstart/build.gradle
@@ -15,7 +15,7 @@ task copyGradleWrapper(type: Copy) {
 
 task addGradleWrapper(type: Exec) {
     workingDir "$buildDir/wrapper"
-    commandLine "${rootProject.projectDir}/gradlew", 'wrapper', 
'--gradle-version', '7.3'
+    commandLine "${rootProject.projectDir}/gradlew", 'wrapper', 
'--gradle-version', '8.14.2'
 
     standardOutput = new ByteArrayOutputStream()
 
@@ -24,10 +24,10 @@ task addGradleWrapper(type: Exec) {
     }
 
     doFirst {
-        def wrapperDirectory = new File(buildDir, "wrapper")
+        def wrapperDirectory = new File(buildDir, 'wrapper')
         wrapperDirectory.mkdirs()
 
-        def settings = new File(wrapperDirectory, "settings.gradle")
+        def settings = new File(wrapperDirectory, 'settings.gradle')
         new FileOutputStream(settings).close()
     }
 
@@ -50,18 +50,18 @@ task processFiltered(type: Copy) {
     filter(ReplaceTokens, tokens: [
         quickstartVersion: project.parent.version,
         tapestryVersion: project.parent.version,
-        springBootVersion: '3.1.3',
-        junitVersion: '5.8.2',
-        jacksonVersion: '2.13.1',
-        jsonVersion: '1.1.4',
-        log4jVersion: '2.17.2',
-        yassonVersion: '2.0.4',
-        servletVersion: '5.0.0',
-        mavenCompilerVersion: '3.8.1',
-        mavenSurefireVersion: '3.1',
-        mavenWarVersion: '3.3.1',
-        mavenJettyVersion: '11.0.15',
-        grettyVersion: '3.0.6'
+        springBootVersion: libs.versions.quickstart.spring.boot.get(),
+        junitVersion: libs.versions.junit5.get(),
+        jacksonVersion: libs.versions.jackson.get(),
+        jsonVersion: libs.versions.quickstart.json.get(),
+        log4jVersion: libs.versions.quickstart.log4j.get(),
+        yassonVersion: libs.versions.quickstart.yasson.get(),
+        servletVersion: libs.versions.jakarta.servlet.api.get(),
+        mavenCompilerVersion: libs.versions.quickstart.maven.compiler.get(),
+        mavenSurefireVersion: libs.versions.quickstart.maven.surefire.get(),
+        mavenWarVersion: libs.versions.quickstart.maven.war.get(),
+        mavenJettyVersion: libs.versions.quickstart.maven.jetty.get(),
+        grettyVersion: libs.versions.quickstart.gretty.get()
     ])
 }
 
@@ -69,4 +69,4 @@ processResources.dependsOn([addWrappers, processFiltered])
 
 jar {
     dependsOn(copyGradleWrapper)
-}
\ No newline at end of file
+}
diff --git a/tapestry-beanvalidator/build.gradle 
b/tapestry-beanvalidator/build.gradle
index 26a49253a..ebeaaa127 100644
--- a/tapestry-beanvalidator/build.gradle
+++ b/tapestry-beanvalidator/build.gradle
@@ -6,19 +6,15 @@ import t5build.*
 
 description = 'Support for JSR-303 Bean Validation via the Hibernate validator 
implementation'
 
-def moduleLibs = [
-    hibernateValidator: 'org.hibernate:hibernate-validator:8.0.1.Final',
-]
-
 dependencies {
     implementation project(':tapestry-core')
 
     implementation libs.jakarta.validation.api
-    implementation moduleLibs.hibernateValidator
+    implementation libs.hibernate.validator
 
-    implementation libs.selenium.legrc, {
-        exclude group: "org.seleniumhq.selenium", module: "jetty-repacked"
-        exclude group: "org.testng", module: "testng"
+    implementation(libs.selenium.legrc) {
+        exclude group: 'org.seleniumhq.selenium', module: 'jetty-repacked'
+        exclude group: 'org.testng', module: 'testng'
     }
 
     testImplementation project(':tapestry-test')
@@ -33,7 +29,7 @@ task compileCoffeeScript(type: CompileCoffeeScript) {
 // Start up the test app, useful when debugging failing integration tests
 task runTestApp303(type:JavaExec) {
     mainClass = 'org.apache.tapestry5.test.JettyRunner'
-    args "-d", "src/test/webapp", "-p", "8080"
+    args '-d', 'src/test/webapp', '-p', '8080'
     classpath += project.sourceSets.test.runtimeClasspath
 }
 
diff --git a/tapestry-cdi/build.gradle b/tapestry-cdi/build.gradle
index fb11d9812..7502e4d61 100644
--- a/tapestry-cdi/build.gradle
+++ b/tapestry-cdi/build.gradle
@@ -1,28 +1,29 @@
 import org.gradle.plugins.ide.idea.model.*
 import t5build.*
 
-description = "Bridge to CDI for Apache Tapestry 5 Project"
+plugins {
+    id 'tapestry.junit4-legacy-convention'
+}
+
+description = 'Bridge to CDI for Apache Tapestry 5 Project'
 
-apply plugin: JavaPlugin
 
 buildDir = 'target/gradle-build'
-       
-project.ext.libraryVersions = [
-    javaeeapi: '6.0-4', 
-    tomee: '1.6.0', 
-    ziplock: '1.5.1',
-    junit: '4.8.1', 
-    commonsHttpclient: '3.1',
-    arquillian: '1.1.1.Final', 
-    jbossJavaeeSpec: '1.0.0.Final',
-    arquillianGlassfish: '1.0.0.CR4',
-    glassfishDistrib: '3.1.1-b04', 
-    jbossDistrib: '7.1.1.Final', 
-    cdi: '1.0-SP4',
-    jbossAS7: '7.1.1.Final', 
-    shrinkwrapDesc: '2.0.0-alpha-3'
-]
 
+def moduleLibs = [
+    javaeeapi: '6.0-4',
+    tomee: 'org.apache.openejb:arquillian-tomee-embedded:1.6.0',
+    ziplock: 'org.apache.openejb:ziplock:1.5.1',
+    arquillianJunitContainer: 
'org.jboss.arquillian.junit:arquillian-junit-container:1.1.1.Final',
+    arquillianGlassfish: 
'org.jboss.arquillian.container:arquillian-glassfish-managed-3.1:1.0.0.CR4',
+    glassfishDistrib: 'org.glassfish.distributions:glassfish:3.1.1-b04@zip',
+    jbossAS7: 'org.jboss.as:jboss-as-arquillian-container-managed:7.1.1.Final',
+    jbossDistrib: 'org.jboss.as:jboss-as-dist:7.1.1.Final@zip',
+    jbossJavaeeSpec: 'org.jboss.spec:jboss-javaee-6.0:1.0.0.Final',
+    cdiApi: 'jakarta.enterprise:cdi-api:1.0-SP4',
+    shrinkwrapDescriptorsApi: 
'org.jboss.shrinkwrap.descriptors:shrinkwrap-descriptors-api-javaee:2.0.0-alpha-3',
+    shrinkwrapDescriptorsImpl: 
'org.jboss.shrinkwrap.descriptors:shrinkwrap-descriptors-impl-javaee:2.0.0-alpha-3',
+]
 
 configurations {
     compileOnly 
@@ -36,30 +37,28 @@ configurations {
 dependencies {
     compile project(':tapestry-core')
     compile project(':tapestry-ioc')
-    testCompile (project(':tapestry-test')){
-         transitive = false
-     } 
-      
+    testCompile (project(':tapestry-test')) {
+        transitive = false
+     }
+
     // replace jakarta.enterprise:cdi-api with group: 'org.jboss.spec', name: 
'jboss-javaee-6.0', version: libraryVersions.jbossJavaeeSpec to compile against 
full Java EE API
-    compileOnly group: 'jakarta.enterprise', name: 'cdi-api', version: 
libraryVersions.cdi
-    
-    
-    testCompile group: 'org.apache.openejb', name: 'ziplock', version: 
libraryVersions.ziplock
-    testCompile group: 'junit', name: 'junit', version: libraryVersions.junit
-    testCompile group: 'commons-httpclient', name: 'commons-httpclient', 
version: libraryVersions.commonsHttpclient
+    compileOnly moduleLibs.cdiApi
+
+    testCompile moduleLibs.ziplock
+    testCompile libs.commons.httpclient
     
-    testCompile group: 'org.jboss.arquillian.junit', name: 
'arquillian-junit-container', version: libraryVersions.arquillian
-    testCompile group: 'org.jboss.shrinkwrap.descriptors', name: 
'shrinkwrap-descriptors-api-javaee', version: libraryVersions.shrinkwrapDesc
-    testRuntime group: 'org.jboss.shrinkwrap.descriptors', name: 
'shrinkwrap-descriptors-impl-javaee', version: libraryVersions.shrinkwrapDesc
+    testCompile moduleLibs.arquillianJunitContainer
+    testCompile moduleLibs.shrinkwrapDescriptorsApi
+    testRuntime moduleLibs.shrinkwrapDescriptorsImpl
     
-    tomeeEmbeddedTestRuntime group: 'org.apache.openejb', name: 
'arquillian-tomee-embedded', version: libraryVersions.tomee
+    tomeeEmbeddedTestRuntime mopduleLibs.tomee
     
-    jbossAS7ManagedTestRuntime group: 'org.jboss.as', name: 
'jboss-as-arquillian-container-managed', version: libraryVersions.jbossAS7
-    jbossAS7ManagedTestRuntime group: 'org.jboss.spec', name: 
'jboss-javaee-6.0', version: libraryVersions.jbossJavaeeSpec
-    jboss "org.jboss.as:jboss-as-dist:$libraryVersions.jbossDistrib@zip"
+    jbossAS7ManagedTestRuntime moduleLibs.jbossAS7
+    jbossAS7ManagedTestRuntime moduleLibs.jbossJavaeeSpec
+    jboss moduleLibs.jbossDistrib
  
-    glassfishManagedTestRuntime group: 'org.jboss.arquillian.container', name: 
'arquillian-glassfish-managed-3.1', version: libraryVersions.arquillianGlassfish
-    glassfish 
"org.glassfish.distributions:glassfish:$libraryVersions.glassfishDistrib@zip"   
  
+    glassfishManagedTestRuntime moduleLibs.arquillianGlassfish
+    glassfish moduleLibs.glassfishDistrib
 }
 
 sourceSets {
@@ -83,8 +82,8 @@ eclipse {
     }
 }
 
-task resolveJBoss(type: Copy) {  
-    destinationDir = file('target') 
+task resolveJBoss(type: Copy) {
+    destinationDir = file('target')
     from { zipTree(configurations.jboss.singleFile) }
 }
 
@@ -95,16 +94,16 @@ task resolveGlassfish(type: Copy) {
 
 
 task tomeeEmbeddedTest(type: Test) {
-  systemProperty 'arquillian.launch', "tomee_embedded"
+  systemProperty 'arquillian.launch', 'tomee_embedded'
 }
 
 task jbossAS7ManagedTest(type: Test) {
-  systemProperty 'arquillian.launch', "jbossas_managed"
+  systemProperty 'arquillian.launch', 'jbossas_managed'
    dependsOn { resolveJBoss }
 }
 
 task glassfishManagedTest(type: Test){
-  systemProperty 'arquillian.launch', "glassfish_managed"
+  systemProperty 'arquillian.launch', 'glassfish_managed'
    dependsOn { resolveGlassfish }
 }
 
@@ -118,9 +117,8 @@ test {
   setEnabled(false)
 }
 
-jar {  
-
-       manifest {      
-               attributes 'Tapestry-Module-Classes': 
'org.apache.tapestry5.cdi.CDIInjectModule'
-               }
- }
+jar {
+    manifest {
+        attributes 'Tapestry-Module-Classes': 
'org.apache.tapestry5.cdi.CDIInjectModule'
+    }
+}
diff --git a/tapestry-clojure/build.gradle b/tapestry-clojure/build.gradle
index dde7f7942..d401b7314 100644
--- a/tapestry-clojure/build.gradle
+++ b/tapestry-clojure/build.gradle
@@ -1,16 +1,13 @@
 plugins {
     id 'tapestry.junit5-spock-convention'
 }
-description = 'Allows Clojure functions to be injected into Tapestry services 
and components'
 
-def moduleLibs = [
-    clojure: 'org.clojure:clojure:1.6.0',
-]
+description = 'Allows Clojure functions to be injected into Tapestry services 
and components'
 
 dependencies {
     implementation project(':tapestry-ioc')
 
-    implementation moduleLibs.clojure
+    implementation libs.clojure
 
     // Added just to prove that it works (TAP5-1945)
     testImplementation project(':tapestry-core')
@@ -18,4 +15,8 @@ dependencies {
     testRuntimeOnly libs.jakarta.servlet.api
 }
 
-jar.manifest.attributes 'Tapestry-Module-Classes': 
'org.apache.tapestry5.clojure.modules.ClojureModule'
+jar {
+    manifest {
+        attributes 'Tapestry-Module-Classes': 
'org.apache.tapestry5.clojure.modules.ClojureModule'
+    }
+}
diff --git a/tapestry-core/build.gradle b/tapestry-core/build.gradle
index 393700baf..0754de77d 100644
--- a/tapestry-core/build.gradle
+++ b/tapestry-core/build.gradle
@@ -10,9 +10,6 @@ description = 'Central module for Tapestry, containing all 
core services and com
 
 def mainGeneratedDir = 'src/main/generated'
 def testGeneratedDir = 'src/test/generated'
-def moduleVersions = [
-    httpclient: '4.5.14'
-]
 
 dependencies {
     api project(':tapestry-ioc')
@@ -31,14 +28,13 @@ dependencies {
 
     provided libs.jakarta.servlet.api
 
-    testImplementation 
"org.apache.httpcomponents:httpclient:${moduleVersions.httpclient}"
+    testImplementation libs.httpcomponents.httpclient
     testImplementation project(":tapestry-spock")
 
     
testRuntimeOnly("${libs.hsqldb.get().module.group}:${libs.hsqldb.get().module.name}:${libs.hsqldb.get().version}:jdk8")
     testRuntimeOnly libs.guice
 }
 
-
 tasks.register('preprocessCoffeeScript', PreprocessCoffeeScript)
 
 tasks.register('compileCoffeeScript', CompileCoffeeScript) {
@@ -83,7 +79,7 @@ tasks.register('testWithPrototype', Test) {
     'appfolder'
 ].each { appName ->
     tasks.register("runTest${appName.capitalize()}", JavaExec) {
-        group = 'Application' // It's good practice to group custom run tasks
+        group = 'Application'
         description = "Starts the ${appName} integration test app, useful when 
debugging."
         mainClass = 'org.apache.tapestry5.test.JettyRunner'
         args '-d', "src/test/${appName}", '-p', '8080'
diff --git a/tapestry-hibernate-core/build.gradle 
b/tapestry-hibernate-core/build.gradle
index d90175664..f89144f41 100644
--- a/tapestry-hibernate-core/build.gradle
+++ b/tapestry-hibernate-core/build.gradle
@@ -19,4 +19,8 @@ dependencies {
     
testRuntimeOnly("${libs.hsqldb.get().module.group}:${libs.hsqldb.get().module.name}:${libs.hsqldb.get().version}:jdk8")
 }
 
-jar.manifest.attributes 'Tapestry-Module-Classes': 
'org.apache.tapestry5.hibernate.modules.HibernateCoreModule'
+jar {
+    manifest {
+        attributes 'Tapestry-Module-Classes': 
'org.apache.tapestry5.hibernate.modules.HibernateCoreModule'
+    }
+}
diff --git a/tapestry-hibernate/build.gradle b/tapestry-hibernate/build.gradle
index 37892a798..4fb26a60f 100644
--- a/tapestry-hibernate/build.gradle
+++ b/tapestry-hibernate/build.gradle
@@ -23,6 +23,6 @@ jar.manifest.attributes 'Tapestry-Module-Classes': 
'org.apache.tapestry5.hiberna
 task runTestApp0(type:JavaExec) {
     description = 'Start tapestry-hibernate integration test app, useful when 
debugging failing integration tests'
     mainClass = 'org.apache.tapestry5.test.JettyRunner'
-    args "-d", "src/test/webapp", "-p", "8080"
+    args '-d', 'src/test/webapp', '-p', '8080'
     classpath += project.sourceSets.test.runtimeClasspath
 }
diff --git a/tapestry-ioc-jcache/build.gradle b/tapestry-ioc-jcache/build.gradle
index bab5d7717..c285da968 100644
--- a/tapestry-ioc-jcache/build.gradle
+++ b/tapestry-ioc-jcache/build.gradle
@@ -23,4 +23,8 @@ dependencies {
     testRuntimeOnly moduleLibs.infinispanJcache /* Just to be able to run the 
tests */
 }
 
-jar.manifest.attributes 'Tapestry-Module-Classes': 
'org.apache.tapestry5.jcache.module.JCacheModule'
+jar {
+    manifest {
+        attributes 'Tapestry-Module-Classes': 
'org.apache.tapestry5.jcache.module.JCacheModule'
+    }
+}
diff --git a/tapestry-javadoc/build.gradle b/tapestry-javadoc/build.gradle
index 3142737a5..59bd8a2b7 100644
--- a/tapestry-javadoc/build.gradle
+++ b/tapestry-javadoc/build.gradle
@@ -2,7 +2,7 @@ plugins {
     id 'tapestry.junit5-convention'
 }
 
-description = "JavaDoc Plugin for Tapestry that generates component reference 
documentation for component classes"
+description = 'JavaDoc Plugin for Tapestry that generates component reference 
documentation for component classes'
 
 dependencies {
     implementation project(':tapestry-core')
diff --git a/tapestry-jmx/build.gradle b/tapestry-jmx/build.gradle
index fa69921ca..00694090c 100644
--- a/tapestry-jmx/build.gradle
+++ b/tapestry-jmx/build.gradle
@@ -10,4 +10,8 @@ dependencies {
     testImplementation project(':tapestry-test')
 }
 
-jar.manifest.attributes 'Tapestry-Module-Classes': 
'org.apache.tapestry5.jmx.modules.JmxModule'
+jar {
+    manifest {
+        attributes 'Tapestry-Module-Classes': 
'org.apache.tapestry5.jmx.modules.JmxModule'
+    }
+}
diff --git a/tapestry-jpa/build.gradle b/tapestry-jpa/build.gradle
index b6dc77069..616244556 100644
--- a/tapestry-jpa/build.gradle
+++ b/tapestry-jpa/build.gradle
@@ -26,13 +26,17 @@ dependencies {
     testImplementation libs.testng
 }
 
-jar.manifest.attributes 'Tapestry-Module-Classes': 
'org.apache.tapestry5.jpa.modules.JpaModule'
-
 (1..6).each { i ->
     tasks.register("runTestApp$i", JavaExec) {
         description = "Start app$i integration test app, useful when debugging 
failing integration tests"
         mainClass = 'org.apache.tapestry5.test.JettyRunner'
-        args "-d", "src/test/app$i", "-p", "8080"
+        args '-d', "src/test/app$i", '-p', '8080'
         classpath = project.sourceSets.test.runtimeClasspath
     }
 }
+
+jar {
+    manifest {
+        attributes 'Tapestry-Module-Classes': 
'org.apache.tapestry5.jpa.modules.JpaModule'
+    }
+}
diff --git a/tapestry-json/build.gradle b/tapestry-json/build.gradle
index a937b3dd0..45095cc81 100644
--- a/tapestry-json/build.gradle
+++ b/tapestry-json/build.gradle
@@ -5,11 +5,14 @@ plugins {
 description = 'Repackaged, improved (and tested) version of code originally 
from https://github.com/tdunning/open-json'
 
 dependencies {
-
     implementation project(':tapestry5-annotations')
     implementation project(':commons')
 
     testImplementation project(":tapestry-func")
 }
 
-jar.manifest.attributes 'Tapestry-Module-Classes': 
'org.apache.tapestry5.json.modules.JSONModule'
+jar {
+    manifest {
+        attributes 'Tapestry-Module-Classes': 
'org.apache.tapestry5.json.modules.JSONModule'
+    }
+}
diff --git a/tapestry-kaptcha/build.gradle b/tapestry-kaptcha/build.gradle
index 48848bbf5..4757d2928 100644
--- a/tapestry-kaptcha/build.gradle
+++ b/tapestry-kaptcha/build.gradle
@@ -17,4 +17,8 @@ dependencies {
     testImplementation project(':tapestry-test')
 }
 
-jar.manifest.attributes 'Tapestry-Module-Classes': 
'org.apache.tapestry5.kaptcha.modules.KaptchaModule'
+jar {
+    manifest {
+        attributes 'Tapestry-Module-Classes': 
'org.apache.tapestry5.kaptcha.modules.KaptchaModule'
+    }
+}
diff --git a/tapestry-latest-java-tests/build.gradle 
b/tapestry-latest-java-tests/build.gradle
index a7e000a73..6954db351 100644
--- a/tapestry-latest-java-tests/build.gradle
+++ b/tapestry-latest-java-tests/build.gradle
@@ -8,14 +8,13 @@ sourceCompatibility = '17'
 targetCompatibility = '17'
 
 tasks.withType(JavaCompile).configureEach {
-    options.compilerArgs += "--enable-preview"
+    options.compilerArgs += '--enable-preview'
 }
 
 tasks.withType(Test).configureEach {
-    jvmArgs += "--enable-preview"
+    jvmArgs += '--enable-preview'
 }
 
-
 dependencies {
     testImplementation project(':tapestry-ioc')
 }
diff --git a/tapestry-mongodb/build.gradle b/tapestry-mongodb/build.gradle
index 10fe2eb32..bd6e72126 100644
--- a/tapestry-mongodb/build.gradle
+++ b/tapestry-mongodb/build.gradle
@@ -22,4 +22,8 @@ dependencies {
     testImplementation moduleLibs.embedMongo
 }
 
-jar.manifest.attributes 'Tapestry-Module-Classes': 
'org.apache.tapestry5.mongodb.modules.MongodbModule'
+jar {
+    manifest {
+        attributes 'Tapestry-Module-Classes': 
'org.apache.tapestry5.mongodb.modules.MongodbModule'
+    }
+}
diff --git a/tapestry-openapi-viewer/build.gradle 
b/tapestry-openapi-viewer/build.gradle
index d80c43648..293166257 100644
--- a/tapestry-openapi-viewer/build.gradle
+++ b/tapestry-openapi-viewer/build.gradle
@@ -1,4 +1,4 @@
-description = "Embedded OpenAPI (Swagger) viewer for Tapestry, based on 
Swagger UI"
+description = 'Embedded OpenAPI (Swagger) viewer for Tapestry, based on 
Swagger UI'
 
 dependencies {
     implementation project(':tapestry-core')
@@ -6,4 +6,8 @@ dependencies {
     testImplementation libs.jakarta.servlet.api
 }
 
-jar.manifest .attributes 'Tapestry-Module-Classes': 
'org.apache.tapestry5.openapiviewer.modules.TapestryOpenApiViewerModule'
+jar {
+    manifest {
+        attributes 'Tapestry-Module-Classes': 
'org.apache.tapestry5.openapiviewer.modules.TapestryOpenApiViewerModule'
+    }
+}
diff --git a/tapestry-rest-jackson/build.gradle 
b/tapestry-rest-jackson/build.gradle
index c40d9f11b..74c390a63 100644
--- a/tapestry-rest-jackson/build.gradle
+++ b/tapestry-rest-jackson/build.gradle
@@ -1,17 +1,20 @@
-description = "Support for using Jackson Databind with the Tapestry REST 
support"
-
 def moduleLibs = [
-    jacksonDatabind: 'com.fasterxml.jackson.core:jackson-databind:2.13.1',
     jsonschemaGenerator: 'com.github.victools:jsonschema-generator:4.20.0',
 ]
 
+description = "Support for using Jackson Databind with the Tapestry REST 
support"
+
 dependencies {
     implementation project(':tapestry-core')
 
-    implementation moduleLibs.jacksonDatabind
+    implementation libs.jackson.databind
     implementation moduleLibs.jsonschemaGenerator
 
     provided libs.jakarta.servlet.api
 }
 
-jar.manifest.attributes 'Tapestry-Module-Classes': 
'org.apache.tapestry5.rest.jackson.modules.RestJacksonModule'
+jar {
+    manifest {
+        attributes 'Tapestry-Module-Classes': 
'org.apache.tapestry5.rest.jackson.modules.RestJacksonModule'
+    }
+}
diff --git a/tapestry-runner/build.gradle b/tapestry-runner/build.gradle
index 315f529c5..8d1c0d51b 100644
--- a/tapestry-runner/build.gradle
+++ b/tapestry-runner/build.gradle
@@ -19,5 +19,5 @@ dependencies {
     implementation "org.apache.tomcat:tomcat-jasper:${moduleVersions.tomcat}"
 
     implementation "org.apache.tomcat:tomcat-dbcp:${moduleVersions.tomcat}"
-    implementation "commons-cli:commons-cli:${moduleVersions.commonsCli}"
+    implementation libs.commons.cli
 }
diff --git a/tapestry-spock/build.gradle b/tapestry-spock/build.gradle
index 2bf1f59e0..db63ee1d2 100644
--- a/tapestry-spock/build.gradle
+++ b/tapestry-spock/build.gradle
@@ -5,8 +5,6 @@ plugins {
 
 description = 'Provides support Tapestry injections in Spock specifications'
 
-apply plugin: 'groovy'
-
 dependencies {
     provided project(':commons')
     provided project(':tapestry-ioc')
diff --git a/tapestry-spring/build.gradle b/tapestry-spring/build.gradle
index 57da96e2c..51eb4edc4 100644
--- a/tapestry-spring/build.gradle
+++ b/tapestry-spring/build.gradle
@@ -23,18 +23,22 @@ dependencies {
     testImplementation project(':tapestry-test')
 }
 
-jar.manifest.attributes 'Tapestry-Module-Classes': 
'org.apache.tapestry5.spring.modules.SpringModule'
-
 task runTestApp(type:JavaExec) {
     description 'Start tapestry-spring integration test app, useful when 
debugging failing integration tests'
     main = 'org.apache.tapestry5.test.JettyRunner'
-    args "-d", "src/test/webapp", "-p", "8080"
+    args '-d', 'src/test/webapp', '-p', '8080'
     classpath += project.sourceSets.test.runtimeClasspath
 }
 
 task runTestApp1(type:JavaExec) {
     description 'Start tapestry-spring integration test app 1, useful when 
debugging failing integration tests'
     main = 'org.apache.tapestry5.test.JettyRunner'
-    args "-d", "src/test/webapp1", "-p", "8080"
+    args '-d', 'src/test/webapp1', '-p', '8080'
     classpath += project.sourceSets.test.runtimeClasspath
 }
+
+jar {
+    manifest {
+        attributes 'Tapestry-Module-Classes': 
'org.apache.tapestry5.spring.modules.SpringModule'
+    }
+}
diff --git a/tapestry-test/build.gradle b/tapestry-test/build.gradle
index 3dbc2644f..70b34c377 100644
--- a/tapestry-test/build.gradle
+++ b/tapestry-test/build.gradle
@@ -13,7 +13,7 @@ dependencies {
 
     api libs.selenium.java
 
-    api libs.selenium.legrc, {
+    api(libs.selenium.legrc) {
         exclude group: 'org.seleniumhq.selenium', module: 'jetty-repacked'
         exclude group: 'org.testng', module: 'testng'
         exclude group: 'junit', module: 'junit'
diff --git a/tapestry-upload/build.gradle b/tapestry-upload/build.gradle
index ad518f74f..ee96ec7c7 100644
--- a/tapestry-upload/build.gradle
+++ b/tapestry-upload/build.gradle
@@ -20,4 +20,8 @@ dependencies {
     testImplementation project(':tapestry-test')
 }
 
-jar.manifest.attributes 'Tapestry-Module-Classes': 
'org.apache.tapestry5.upload.modules.UploadModule'
+jar {
+    manifest {
+        attributes 'Tapestry-Module-Classes': 
'org.apache.tapestry5.upload.modules.UploadModule'
+    }
+}
diff --git a/tapestry-version-migrator/build.gradle 
b/tapestry-version-migrator/build.gradle
index 43bf2bf69..7a211631d 100644
--- a/tapestry-version-migrator/build.gradle
+++ b/tapestry-version-migrator/build.gradle
@@ -12,4 +12,8 @@ tasks.withType(Test).configureEach {
     }
 }
 
-jar.manifest.attributes 'Main-Class': 
'org.apache.tapestry5.versionmigrator.Main'
+jar {
+    manifest {
+        attributes 'Main-Class': 'org.apache.tapestry5.versionmigrator.Main'
+    }
+}
diff --git a/tapestry-webresources/build.gradle 
b/tapestry-webresources/build.gradle
index 4a55e2dcb..38b43a70b 100644
--- a/tapestry-webresources/build.gradle
+++ b/tapestry-webresources/build.gradle
@@ -35,11 +35,15 @@ dependencies {
     testImplementation libs.webdrivermanager
 }
 
-jar.manifest.attributes 'Tapestry-Module-Classes': 
'org.apache.tapestry5.webresources.modules.WebResourcesModule'
-
 test {
     systemProperties(
             'geb.build.reportsDir': "${reporting.baseDir}/geb",
             'tapestry.compiled-asset-cache-dir': 
"${buildDir}/compiled-asset-cache",
-            'tapestry.production-mode': "false")
+            'tapestry.production-mode': 'false')
+}
+
+jar {
+    manifest {
+        attributes 'Tapestry-Module-Classes': 
'org.apache.tapestry5.webresources.modules.WebResourcesModule'
+    }
 }

Reply via email to