You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@tapestry.apache.org by th...@apache.org on 2022/01/15 01:09:26 UTC

[tapestry-5] 01/01: Partial work on upgrading to latest Gradle

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

thiagohp pushed a commit to branch latest-java-tests
in repository https://gitbox.apache.org/repos/asf/tapestry-5.git

commit 5d8f3b0eb802cd7fc11b94b15bba8dbf69c24f5c
Author: Thiago H. de Paula Figueiredo <th...@arsmachina.com.br>
AuthorDate: Fri Jan 14 22:07:57 2022 -0300

    Partial work on upgrading to latest Gradle
---
 beanmodel/build.gradle                   |  14 +--
 build.gradle                             |  84 +++++++------
 buildSrc/build.gradle                    |   2 +-
 commons/build.gradle                     |   6 +-
 genericsresolver-guava/build.gradle      |   8 +-
 gradle/wrapper/gradle-wrapper.jar        | Bin 54727 -> 55616 bytes
 gradle/wrapper/gradle-wrapper.properties |   2 +-
 gradlew                                  |  22 +++-
 gradlew.bat                              |  18 ++-
 plastic/build.gradle                     |   2 +-
 settings.gradle                          |  24 ++++
 tapestry-beanvalidator/build.gradle      |   8 +-
 tapestry-clojure/build.gradle            |   8 +-
 tapestry-core/build.gradle               |  24 ++--
 tapestry-func/build.gradle               |   4 +-
 tapestry-hibernate-core/build.gradle     |  14 +--
 tapestry-hibernate/build.gradle          |  10 +-
 tapestry-http/build.gradle               |  14 +--
 tapestry-internal-test/build.gradle      |   2 +-
 tapestry-ioc-jcache/build.gradle         |  10 +-
 tapestry-ioc-junit/build.gradle          |   4 +-
 tapestry-ioc/build.gradle                |  24 ++--
 tapestry-javadoc/build.gradle            |   6 +-
 tapestry-jmx/build.gradle                |   4 +-
 tapestry-jpa/build.gradle                |  16 +--
 tapestry-kaptcha/build.gradle            |   6 +-
 tapestry-latest-java-tests/LICENSE.txt   | 202 +++++++++++++++++++++++++++++++
 tapestry-latest-java-tests/build.gradle  |   5 +
 tapestry-mongodb/build.gradle            |  10 +-
 tapestry-openapi-viewer/build.gradle     |   4 +-
 tapestry-rest-jackson/build.gradle       |   6 +-
 tapestry-runner/build.gradle             |  20 +--
 tapestry-spock/build.gradle              |   8 +-
 tapestry-spring/build.gradle             |   6 +-
 tapestry-test-data/build.gradle          |   2 +-
 tapestry-test/build.gradle               |  14 +--
 tapestry-upload/build.gradle             |   8 +-
 tapestry-version-migrator/build.gradle   |   2 +-
 tapestry-webresources/build.gradle       |  20 +--
 39 files changed, 459 insertions(+), 184 deletions(-)

diff --git a/beanmodel/build.gradle b/beanmodel/build.gradle
index c63d5b6..e1bb074 100644
--- a/beanmodel/build.gradle
+++ b/beanmodel/build.gradle
@@ -9,21 +9,21 @@ apply plugin: 'antlr'
 buildDir = 'target/gradle-build'
 
 dependencies {
-    compile project(":plastic")
-    compile project(":tapestry5-annotations")
-    compile project(":commons")
-    compile "org.slf4j:slf4j-api:${versions.slf4j}"
+    implementation project(":plastic")
+    api project(":tapestry5-annotations")
+    api project(":commons")
+    implementation "org.slf4j:slf4j-api:${versions.slf4j}"
 
     // ANTLR tool path used with the generateGrammarSource task
     antlr "org.antlr:antlr:3.5.2"
 
     // Transitive will bring in the unwanted string template library as well
-    compile "org.antlr:antlr-runtime:3.5.2", {
+    implementation "org.antlr:antlr-runtime:3.5.2", {
         exclude group: "org.antlr", module: "stringtemplate"
     }
 
-    testCompile "org.testng:testng:${versions.testng}", { transitive = false }
-    testCompile "org.easymock:easymock:${versions.easymock}"
+    testImplementation "org.testng:testng:${versions.testng}", { transitive = false }
+    testImplementation "org.easymock:easymock:${versions.easymock}"
 }
 
 clean.delete generateGrammarSource.outputDirectory
diff --git a/build.gradle b/build.gradle
index b73e698..c70e907 100755
--- a/build.gradle
+++ b/build.gradle
@@ -80,8 +80,6 @@ allprojects {
 
     apply plugin: "eclipse"
     apply plugin: "idea"
-    apply plugin: "signing"
-
 
     repositories {
         mavenCentral()
@@ -133,12 +131,28 @@ String jdkVersion = System.properties['java.version']
 def jdkMajorVersion = jdkVersion.substring(0, jdkVersion.indexOf(".")) // 1, 9, 10...
 
 subprojects {
-
-    def specifyMaxPermSize = jdkVersion ==~ /1\.[67].+/
     
-    version = parent.version
+    def specifyMaxPermSize = jdkVersion ==~ /1\.[67].+/
 
-    group = "org.apache.tapestry"
+    apply plugin: "maven-publish"  // for deployment
+    
+    publishing {
+        publications {
+            maven(MavenPublication) {
+                version = parent.version
+                groupId = "org.apache.tapestry"
+                // from components.java
+            }
+        }
+    }
+    
+    if (doSign) {
+        apply plugin: "signing"
+        signing {
+            // sign publishing.publications.mavenJava
+            sign publishing.publications.maven
+        }
+    }
 
     configurations {
         provided
@@ -146,8 +160,6 @@ subprojects {
 
     apply plugin: "java"
     apply plugin: "groovy" // mostly for testing
-    apply plugin: "maven"  // for deployment
-    // TODO: replace the "maven" plugin above with the newer "maven-publish"
 
     apply plugin: "project-report"
     apply plugin: "jacoco"
@@ -179,9 +191,11 @@ subprojects {
 
     dependencies {
         
-        testCompile "org.spockframework:spock-core:${versions.spock}"
+        // https://docs.gradle.org/7.3.3/userguide/upgrading_version_6.html#potential_breaking_changes, 
+        // Table 1. Common configuration upgrades
+        testImplementation "org.spockframework:spock-core:${versions.spock}"
          
-        testRuntime "org.slf4j:slf4j-log4j12:${versions.slf4j}"
+        testRuntimeOnly "org.slf4j:slf4j-log4j12:${versions.slf4j}"
     }
 
     compileTestGroovy {
@@ -274,40 +288,38 @@ subprojects {
         }
     }
 
-    if (rootProject.doSign) {
-        // sign (create PGP signature for) archives (standard JARs)
-        // and meta (sources JARs)
-        signing { sign configurations.archives, configurations.meta }
-    }
-
-    uploadPublished {
-
-        doFirst {
-            if (!canDeploy) {
-                throw new InvalidUserDataException("Missing upload credentials. Set '$deployUsernameProperty' and '$deployPasswordProperty' root project properties.")
-            }
-        }
+//    uploadPublished {
+//
+//        doFirst {
+//            if (!canDeploy) {
+//                throw new InvalidUserDataException("Missing upload credentials. Set '$deployUsernameProperty' and '$deployPasswordProperty' root project properties.")
+//            }
+//        }
 
         if (canDeploy) {
             repositories {
-
-                project.ext.deployer = repositories.mavenDeployer {
-
-                    if (doSign) {
-                        beforeDeployment { MavenDeployment deployment -> signing.signPom(deployment) }
-                    }
-
-                    repository(url: stagingUrl) {
-                        authentication(userName: deployUsername(), password: deployPassword())
+                
+                maven {
+                    name = "apacheSnapshots"
+                    url = snapshotUrl
+                    credentials {
+                        username = deployUsername()
+                        password = deployPassword()
                     }
-
-                    snapshotRepository(url: snapshotUrl) {
-                        authentication(userName: deployUsername(), password: deployPassword())
+                }
+                
+                maven {
+                    name = "apacheStaging"
+                    url = stagingUrl
+                    credentials {
+                        username = deployUsername()
+                        password = deployPassword()
                     }
                 }
+                
             }
         }
-    }
+//    }
 }
 
 subprojects.each { project.evaluationDependsOn(it.name) }
diff --git a/buildSrc/build.gradle b/buildSrc/build.gradle
index 33da1fc..c08ff05 100644
--- a/buildSrc/build.gradle
+++ b/buildSrc/build.gradle
@@ -6,7 +6,7 @@ repositories {
 
 
 dependencies {
-    compile ("ro.isdc.wro4j:wro4j-extensions:1.8.0"){
+    implementation ("ro.isdc.wro4j:wro4j-extensions:1.8.0"){
       exclude group: 'org.jruby'
       exclude module: 'spring-web'
       exclude module: 'closure-compiler'
diff --git a/commons/build.gradle b/commons/build.gradle
index 31859b4..3e2396b 100644
--- a/commons/build.gradle
+++ b/commons/build.gradle
@@ -8,9 +8,9 @@ description = "Project including common classes for tapestry-core, tapestry-ioc
 buildDir = 'target/gradle-build'
        
 dependencies {
-	compile project(":plastic")
-	compile project(":tapestry5-annotations")
-	compile project(":tapestry-func")
+	implementation project(":plastic")
+	implementation project(":tapestry5-annotations")
+	implementation project(":tapestry-func")
 }
 
 jar {	
diff --git a/genericsresolver-guava/build.gradle b/genericsresolver-guava/build.gradle
index f7b037c..c6001a9 100644
--- a/genericsresolver-guava/build.gradle
+++ b/genericsresolver-guava/build.gradle
@@ -1,8 +1,8 @@
 description = "Replaces the Tapestry Commons's own Java Generics resolution code with the one from Google Guava's one"
 
 dependencies {
-  compile project(':commons')
-  testCompile project(':tapestry-core')
-  testCompile project(':tapestry-test')
-  provided compile ('com.google.guava:guava:27.0.1-jre')
+  implementation project(':commons')
+  testImplementation project(':tapestry-core')
+  testImplementation project(':tapestry-test')
+  provided implementation ('com.google.guava:guava:27.0.1-jre')
 }
\ No newline at end of file
diff --git a/gradle/wrapper/gradle-wrapper.jar b/gradle/wrapper/gradle-wrapper.jar
index 27768f1..5c2d1cf 100644
Binary files a/gradle/wrapper/gradle-wrapper.jar and b/gradle/wrapper/gradle-wrapper.jar differ
diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties
index fb7ef98..2e6e589 100644
--- a/gradle/wrapper/gradle-wrapper.properties
+++ b/gradle/wrapper/gradle-wrapper.properties
@@ -1,5 +1,5 @@
 distributionBase=GRADLE_USER_HOME
 distributionPath=wrapper/dists
+distributionUrl=https\://services.gradle.org/distributions/gradle-7.3.3-bin.zip
 zipStoreBase=GRADLE_USER_HOME
 zipStorePath=wrapper/dists
-distributionUrl=https\://services.gradle.org/distributions/gradle-4.10.2-bin.zip
diff --git a/gradlew b/gradlew
index cccdd3d..83f2acf 100755
--- a/gradlew
+++ b/gradlew
@@ -1,5 +1,21 @@
 #!/usr/bin/env sh
 
+#
+# Copyright 2015 the original author or authors.
+#
+# 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
+#
+#      https://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.
+#
+
 ##############################################################################
 ##
 ##  Gradle start up script for UN*X
@@ -28,7 +44,7 @@ APP_NAME="Gradle"
 APP_BASE_NAME=`basename "$0"`
 
 # Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
-DEFAULT_JVM_OPTS=""
+DEFAULT_JVM_OPTS='"-Xmx64m" "-Xms64m"'
 
 # Use the maximum available, or set MAX_FD != -1 to use that value.
 MAX_FD="maximum"
@@ -109,8 +125,8 @@ if $darwin; then
     GRADLE_OPTS="$GRADLE_OPTS \"-Xdock:name=$APP_NAME\" \"-Xdock:icon=$APP_HOME/media/gradle.icns\""
 fi
 
-# For Cygwin, switch paths to Windows format before running java
-if $cygwin ; then
+# For Cygwin or MSYS, switch paths to Windows format before running java
+if [ "$cygwin" = "true" -o "$msys" = "true" ] ; then
     APP_HOME=`cygpath --path --mixed "$APP_HOME"`
     CLASSPATH=`cygpath --path --mixed "$CLASSPATH"`
     JAVACMD=`cygpath --unix "$JAVACMD"`
diff --git a/gradlew.bat b/gradlew.bat
index e95643d..24467a1 100644
--- a/gradlew.bat
+++ b/gradlew.bat
@@ -1,3 +1,19 @@
+@rem
+@rem Copyright 2015 the original author or authors.
+@rem
+@rem Licensed under the Apache License, Version 2.0 (the "License");
+@rem you may not use this file except in compliance with the License.
+@rem You may obtain a copy of the License at
+@rem
+@rem      https://www.apache.org/licenses/LICENSE-2.0
+@rem
+@rem Unless required by applicable law or agreed to in writing, software
+@rem distributed under the License is distributed on an "AS IS" BASIS,
+@rem WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+@rem See the License for the specific language governing permissions and
+@rem limitations under the License.
+@rem
+
 @if "%DEBUG%" == "" @echo off
 @rem ##########################################################################
 @rem
@@ -14,7 +30,7 @@ set APP_BASE_NAME=%~n0
 set APP_HOME=%DIRNAME%
 
 @rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
-set DEFAULT_JVM_OPTS=
+set DEFAULT_JVM_OPTS="-Xmx64m" "-Xms64m"
 
 @rem Find java.exe
 if defined JAVA_HOME goto findJavaFromJavaHome
diff --git a/plastic/build.gradle b/plastic/build.gradle
index 17e24b6..83be57d 100644
--- a/plastic/build.gradle
+++ b/plastic/build.gradle
@@ -1,7 +1,7 @@
 description = "High-level runtime transformations of Java classes"
 
 dependencies {
-    compile "org.slf4j:slf4j-api:${versions.slf4j}"
+    implementation "org.slf4j:slf4j-api:${versions.slf4j}"
 }
 
 test { 
diff --git a/settings.gradle b/settings.gradle
index a3705d0..5f58e6b 100644
--- a/settings.gradle
+++ b/settings.gradle
@@ -1,9 +1,33 @@
+def getJavaLatestMajorVersion() {
+    return 17
+}
+
+def getJavaMajorVersion() {
+    String javaVersion = System.getProperty("java.version")
+    return Integer.parseInt(javaVersion.substring(0, javaVersion.indexOf(".")))
+}
+
+def isJavaLatestMajorVersion() {
+    return getJavaMajorVersion() == getJavaLatestMajorVersion() 
+}
+
+def isWrongJavaLatestMajorVersion() {
+    return getJavaMajorVersion() > getJavaLatestMajorVersion() 
+}
+
+if (isWrongJavaLatestMajorVersion()) {
+    println "Current major Java version is higher than the latest one configured in settings.gradle";
+}
+
 include "plastic", "tapestry5-annotations", "tapestry-test", "tapestry-func", "tapestry-ioc", "tapestry-json", "tapestry-http", "tapestry-core"
 include "tapestry-hibernate-core", "tapestry-hibernate", "tapestry-jmx", "tapestry-upload", "tapestry-spring"
 include "tapestry-beanvalidator", "tapestry-jpa", "tapestry-kaptcha"
 if (JavaVersion.current() != JavaVersion.VERSION_1_8) {
     include "tapestry-javadoc"
 }
+if (isJavaLatestMajorVersion()) {
+    include "tapestry-latest-java-tests"
+}
 include "quickstart", "tapestry-clojure", "tapestry-mongodb"
 include "tapestry-test-data", 'tapestry-internal-test', "tapestry-ioc-junit"
 include "tapestry-webresources", "tapestry-runner", "tapestry-test-constants"
diff --git a/tapestry-beanvalidator/build.gradle b/tapestry-beanvalidator/build.gradle
index 24ac5a1..4db1bba 100644
--- a/tapestry-beanvalidator/build.gradle
+++ b/tapestry-beanvalidator/build.gradle
@@ -3,12 +3,12 @@ import t5build.*
 description = "Support for JSR-303 Bean Validation via the Hibernate validator implementation"
 
 dependencies {
-  compile project(':tapestry-core')
+  implementation project(':tapestry-core')
 
-  compile "javax.validation:validation-api:1.0.0.GA"
-  compile "org.hibernate:hibernate-validator:4.3.2.Final"
+  implementation "javax.validation:validation-api:1.0.0.GA"
+  implementation "org.hibernate:hibernate-validator:4.3.2.Final"
 
-  testCompile project(':tapestry-test')
+  testImplementation project(':tapestry-test')
 }
 
 task compileCoffeeScript(type: CompileCoffeeScript) {
diff --git a/tapestry-clojure/build.gradle b/tapestry-clojure/build.gradle
index 38db04e..9ce3f66 100644
--- a/tapestry-clojure/build.gradle
+++ b/tapestry-clojure/build.gradle
@@ -1,12 +1,12 @@
 description = "Allows Clojure functions to be injected into Tapestry services and components"
 
 dependencies {
-  compile project(':tapestry-ioc')
-  compile "org.clojure:clojure:1.6.0"
+  implementation project(':tapestry-ioc')
+  implementation "org.clojure:clojure:1.6.0"
 
   // Added just to prove that it works (TAP5-1945)
-  testCompile project(':tapestry-core')
-  testRuntime "javax.servlet:javax.servlet-api:${versions.servletapi}"
+  testImplementation project(':tapestry-core')
+  testRuntimeOnly "javax.servlet:javax.servlet-api:${versions.servletapi}"
 }
 
 test {
diff --git a/tapestry-core/build.gradle b/tapestry-core/build.gradle
index 640402d..16f1b11 100644
--- a/tapestry-core/build.gradle
+++ b/tapestry-core/build.gradle
@@ -12,27 +12,27 @@ project.ext {
 clean.delete mainGeneratedDir, testGeneratedDir
 
 dependencies {
-    compile project(':tapestry-ioc')
-    compile project(':tapestry-json')
-    compile project(':beanmodel')
-    compile project(':tapestry-http')
+    implementation project(':tapestry-ioc')
+    implementation project(':tapestry-json')
+    implementation project(':beanmodel')
+    implementation project(':tapestry-http')
     
-    compile 'jakarta.annotation:jakarta.annotation-api:1.3.4'
-    compile 'jakarta.xml.bind:jakarta.xml.bind-api:2.3.2'
-    compile 'org.glassfish.jaxb:jaxb-runtime:2.3.2'
-    compile 'com.sun.xml.ws:jaxws-rt:2.3.2'
-    compile 'javax.xml.ws:jaxws-api:2.3.1'
+    implementation 'jakarta.annotation:jakarta.annotation-api:1.3.4'
+    implementation 'jakarta.xml.bind:jakarta.xml.bind-api:2.3.2'
+    implementation 'org.glassfish.jaxb:jaxb-runtime:2.3.2'
+    implementation 'com.sun.xml.ws:jaxws-rt:2.3.2'
+    implementation 'javax.xml.ws:jaxws-api:2.3.1'
 
     provided project(":tapestry-test")
     provided project(":tapestry-test-constants")
 
     provided "javax.servlet:javax.servlet-api:${versions.servletapi}"
 
-    compile "commons-codec:commons-codec:1.10"
+    implementation "commons-codec:commons-codec:1.10"
 
-    testRuntime "org.hsqldb:hsqldb:1.8.0.10"
+    testRuntimeOnly "org.hsqldb:hsqldb:1.8.0.10"
 
-    testRuntime 'com.google.inject:guice:3.0'
+    testRuntimeOnly 'com.google.inject:guice:3.0'
 }
 
 task preprocessCoffeeScript(type: PreprocessCoffeeScript) {
diff --git a/tapestry-func/build.gradle b/tapestry-func/build.gradle
index 566e264..a160dd0 100644
--- a/tapestry-func/build.gradle
+++ b/tapestry-func/build.gradle
@@ -1,6 +1,6 @@
 description = "Light-weight functional programming for Flows of values"
 
 dependencies {
-  testCompile   "org.testng:testng:${versions.testng}"
-  testCompile   "commons-lang:commons-lang:2.6"
+  testImplementation   "org.testng:testng:${versions.testng}"
+  testImplementation   "commons-lang:commons-lang:2.6"
 }
\ No newline at end of file
diff --git a/tapestry-hibernate-core/build.gradle b/tapestry-hibernate-core/build.gradle
index 4aca3ed..26c7c5a 100644
--- a/tapestry-hibernate-core/build.gradle
+++ b/tapestry-hibernate-core/build.gradle
@@ -2,16 +2,16 @@ description = "Basic Hibernate services for Tapestry, useable outside of a Tapes
 
 
 dependencies {
-    compile project(':tapestry-ioc')
+    implementation project(':tapestry-ioc')
 
-    compile group: 'org.hibernate', name: 'hibernate-core', version: versions.hibernate
+    implementation group: 'org.hibernate', name: 'hibernate-core', version: versions.hibernate
     
-    compile 'org.glassfish.jaxb:jaxb-runtime:2.3.2'
+    implementation 'org.glassfish.jaxb:jaxb-runtime:2.3.2'
 
-    testCompile project(':tapestry-test')
-    testCompile "org.easymock:easymock:${versions.easymock}"
-    testCompile "org.testng:testng:${versions.testng}", { transitive = false }
-    testRuntime "org.hsqldb:hsqldb:2.2.8"
+    testImplementation project(':tapestry-test')
+    testImplementation "org.easymock:easymock:${versions.easymock}"
+    testImplementation "org.testng:testng:${versions.testng}", { transitive = false }
+    testRuntimeOnly "org.hsqldb:hsqldb:2.2.8"
 }
 
 jar {
diff --git a/tapestry-hibernate/build.gradle b/tapestry-hibernate/build.gradle
index 52e2ca3..06286ba 100644
--- a/tapestry-hibernate/build.gradle
+++ b/tapestry-hibernate/build.gradle
@@ -1,13 +1,13 @@
 description = "Provides support for simple CRUD applications built on top of Tapestry and Hibernate"
 
 dependencies {
-  compile project(':tapestry-core')
-  compile project(':tapestry-hibernate-core')
-  compile "org.jboss.logging:jboss-logging:3.3.0.Final"  
+  implementation project(':tapestry-core')
+  implementation project(':tapestry-hibernate-core')
+  implementation "org.jboss.logging:jboss-logging:3.3.0.Final"  
 
-  testCompile project(':tapestry-test')
+  testImplementation project(':tapestry-test')
   
-  testRuntime "org.hsqldb:hsqldb:2.2.8"
+  testRuntimeOnly "org.hsqldb:hsqldb:2.2.8"
 }
 
 jar {
diff --git a/tapestry-http/build.gradle b/tapestry-http/build.gradle
index 0840bf9..c9d4efc 100644
--- a/tapestry-http/build.gradle
+++ b/tapestry-http/build.gradle
@@ -5,21 +5,21 @@ import t5build.*
 description = "Tapestry classes that handle HTTP requests"
 
 dependencies {
-    compile project(':tapestry-ioc')
-    compile project(':tapestry-json')
-    compile project(':beanmodel')
+    implementation project(':tapestry-ioc')
+    implementation project(':tapestry-json')
+    implementation project(':beanmodel')
 
     provided project(":tapestry-test")
     provided project(":tapestry-test-constants")
 
     provided "javax.servlet:javax.servlet-api:${versions.servletapi}"
 
-    compile "commons-codec:commons-codec:1.10"
-    compile "commons-io:commons-io:2.11.0"
+    implementation "commons-codec:commons-codec:1.10"
+    implementation "commons-io:commons-io:2.11.0"
 
-    testRuntime "org.hsqldb:hsqldb:1.8.0.10"
+    testRuntimeOnly "org.hsqldb:hsqldb:1.8.0.10"
 
-    testRuntime 'com.google.inject:guice:3.0'
+    testRuntimeOnly 'com.google.inject:guice:3.0'
 }
 
 // Not sure why this is necessary:
diff --git a/tapestry-internal-test/build.gradle b/tapestry-internal-test/build.gradle
index 7ca24b6..9caa72c 100644
--- a/tapestry-internal-test/build.gradle
+++ b/tapestry-internal-test/build.gradle
@@ -1,5 +1,5 @@
 description = "Internal utilties used to assist with testing; not intended for outside use"
 
 dependencies {
-    compile project(":tapestry-core")
+    implementation project(":tapestry-core")
 }
\ No newline at end of file
diff --git a/tapestry-ioc-jcache/build.gradle b/tapestry-ioc-jcache/build.gradle
index 5a06738..878cbab 100644
--- a/tapestry-ioc-jcache/build.gradle
+++ b/tapestry-ioc-jcache/build.gradle
@@ -12,11 +12,11 @@ project.ext.libraryVersions = [
 dependencies {
     /*compile "org.apache.tapestry:tapestry-ioc:${tapestryVersion()}"*/
 	provided project(":tapestry-ioc")
-	compile "javax.cache:cache-api:${libraryVersions.jcache}"
-	compile "org.jsr107.ri:cache-annotations-ri-common:${libraryVersions.jcache}"
-    testCompile "javax.cache:cache-tests:${libraryVersions.jcache}"
-    testCompile "javax.cache:test-domain:${libraryVersions.jcache}"
-    testRuntime "org.infinispan:infinispan-jcache:7.0.0.Alpha4" /* Just to be able to run the tests */
+	implementation "javax.cache:cache-api:${libraryVersions.jcache}"
+	implementation "org.jsr107.ri:cache-annotations-ri-common:${libraryVersions.jcache}"
+    testImplementation "javax.cache:cache-tests:${libraryVersions.jcache}"
+    testImplementation "javax.cache:test-domain:${libraryVersions.jcache}"
+    testRuntimeOnly "org.infinispan:infinispan-jcache:7.0.0.Alpha4" /* Just to be able to run the tests */
 }
 
 jar {
diff --git a/tapestry-ioc-junit/build.gradle b/tapestry-ioc-junit/build.gradle
index 6b2b625..39a81a2 100644
--- a/tapestry-ioc-junit/build.gradle
+++ b/tapestry-ioc-junit/build.gradle
@@ -1,8 +1,8 @@
 description = "Utilities for junit testing a tapestry-ioc application"
 
 dependencies {
-    compile project(':tapestry-ioc')
-	compile 'junit:junit:4.11'
+    implementation project(':tapestry-ioc')
+	implementation 'junit:junit:4.11'
 }
 
 test {
diff --git a/tapestry-ioc/build.gradle b/tapestry-ioc/build.gradle
index cfce1ca..b571603 100644
--- a/tapestry-ioc/build.gradle
+++ b/tapestry-ioc/build.gradle
@@ -1,27 +1,27 @@
 description = "A code-centric, high-performance, simple Inversion of Control container"
 
 dependencies {
-    compile project(':tapestry-func')
-    compile project(':tapestry5-annotations')
-    compile project(":plastic")
-    compile project(":beanmodel")
+    implementation project(':tapestry-func')
+    implementation project(':tapestry5-annotations')
+    implementation project(":plastic")
+    implementation project(":beanmodel")
 
     provided project(':tapestry-test')
 
     // For now, keep these compile dependencies synchronized with the binaries dependencies
     // of the top-level build:
 
-    compile "javax.inject:javax.inject:1"
-    compile "javax.annotation:javax.annotation-api:1.3.2"
+    implementation "javax.inject:javax.inject:1"
+    implementation "javax.annotation:javax.annotation-api:1.3.2"
 
-    compile "org.slf4j:slf4j-api:${versions.slf4j}"
+    implementation "org.slf4j:slf4j-api:${versions.slf4j}"
 
-    testCompile "commons-lang:commons-lang:2.6"
-    testCompile "org.apache.commons:commons-lang3:3.4"
+    testImplementation "commons-lang:commons-lang:2.6"
+    testImplementation "org.apache.commons:commons-lang3:3.4"
     
-    testCompile "org.apache.commons:commons-lang3:3.4"
-    testCompile "org.hibernate:hibernate-core:5.2.10.Final"
-    testRuntime "org.hsqldb:hsqldb:2.2.8"    
+    testImplementation "org.apache.commons:commons-lang3:3.4"
+    testImplementation "org.hibernate:hibernate-core:5.2.10.Final"
+    testRuntimeOnly "org.hsqldb:hsqldb:2.2.8"    
     
     provided "org.testng:testng:${versions.testng}", { transitive = false }
 }
diff --git a/tapestry-javadoc/build.gradle b/tapestry-javadoc/build.gradle
index c2b7241..d72b91a 100644
--- a/tapestry-javadoc/build.gradle
+++ b/tapestry-javadoc/build.gradle
@@ -1,11 +1,11 @@
 description = "JavaDoc Plugin for Tapestry that generates component reference documentation for component classes"
 
 dependencies {
-  compile project(':tapestry-core')
-  compile "commons-lang:commons-lang:2.6"
+  implementation project(':tapestry-core')
+  implementation "commons-lang:commons-lang:2.6"
   
   if (JavaVersion.current() <= JavaVersion.VERSION_1_8) {
-    compile files(getTools())
+    implementation files(getTools())
   }
   
 }
diff --git a/tapestry-jmx/build.gradle b/tapestry-jmx/build.gradle
index 465c74e..ef371e8 100644
--- a/tapestry-jmx/build.gradle
+++ b/tapestry-jmx/build.gradle
@@ -1,9 +1,9 @@
 description = "Allows easy exposure of Tapestry Services as JMX MBeans"
 
 dependencies {
-  compile project(':tapestry-core')
+  implementation project(':tapestry-core')
 
-  testCompile project(':tapestry-test')
+  testImplementation project(':tapestry-test')
   }
 
 test {
diff --git a/tapestry-jpa/build.gradle b/tapestry-jpa/build.gradle
index 40bfe9d..cc6c106 100644
--- a/tapestry-jpa/build.gradle
+++ b/tapestry-jpa/build.gradle
@@ -1,17 +1,17 @@
 description = "Provides support for simple CRUD applications built on top of Tapestry and JPA"
 
 dependencies {
-  compile project(':tapestry-core')
-  compile "org.apache.geronimo.specs:geronimo-jpa_2.0_spec:1.1"
-  compile 'javax.enterprise:cdi-api:1.2'
+  implementation project(':tapestry-core')
+  implementation "org.apache.geronimo.specs:geronimo-jpa_2.0_spec:1.1"
+  implementation 'javax.enterprise:cdi-api:1.2'
 
 
-  testCompile project(':tapestry-test')
-  testCompile 'org.eclipse.persistence:eclipselink:2.7.7'
+  testImplementation project(':tapestry-test')
+  testImplementation 'org.eclipse.persistence:eclipselink:2.7.7'
 
-  testRuntime "com.h2database:h2:1.2.145"
-  testRuntime "org.apache.tomcat:dbcp:6.0.32"
-  testRuntime 'com.h2database:h2:1.3.175'
+  testRuntimeOnly "com.h2database:h2:1.2.145"
+  testRuntimeOnly "org.apache.tomcat:dbcp:6.0.32"
+  testRuntimeOnly 'com.h2database:h2:1.3.175'
 }
 
 repositories {
diff --git a/tapestry-kaptcha/build.gradle b/tapestry-kaptcha/build.gradle
index 2594d6a..4b79ed9 100644
--- a/tapestry-kaptcha/build.gradle
+++ b/tapestry-kaptcha/build.gradle
@@ -1,13 +1,13 @@
 description = "Kaptcha user verification support"
 
 dependencies {
-    compile project(':tapestry-core')
+    implementation project(':tapestry-core')
 
-    compile "com.github.axet:kaptcha:0.0.8"
+    implementation "com.github.axet:kaptcha:0.0.8"
 
     provided "javax.servlet:javax.servlet-api:${versions.servletapi}"
 
-    testCompile project(':tapestry-test')
+    testImplementation project(':tapestry-test')
 }
 
 jar {
diff --git a/tapestry-latest-java-tests/LICENSE.txt b/tapestry-latest-java-tests/LICENSE.txt
new file mode 100644
index 0000000..d645695
--- /dev/null
+++ b/tapestry-latest-java-tests/LICENSE.txt
@@ -0,0 +1,202 @@
+
+                                 Apache License
+                           Version 2.0, January 2004
+                        http://www.apache.org/licenses/
+
+   TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
+
+   1. Definitions.
+
+      "License" shall mean the terms and conditions for use, reproduction,
+      and distribution as defined by Sections 1 through 9 of this document.
+
+      "Licensor" shall mean the copyright owner or entity authorized by
+      the copyright owner that is granting the License.
+
+      "Legal Entity" shall mean the union of the acting entity and all
+      other entities that control, are controlled by, or are under common
+      control with that entity. For the purposes of this definition,
+      "control" means (i) the power, direct or indirect, to cause the
+      direction or management of such entity, whether by contract or
+      otherwise, or (ii) ownership of fifty percent (50%) or more of the
+      outstanding shares, or (iii) beneficial ownership of such entity.
+
+      "You" (or "Your") shall mean an individual or Legal Entity
+      exercising permissions granted by this License.
+
+      "Source" form shall mean the preferred form for making modifications,
+      including but not limited to software source code, documentation
+      source, and configuration files.
+
+      "Object" form shall mean any form resulting from mechanical
+      transformation or translation of a Source form, including but
+      not limited to compiled object code, generated documentation,
+      and conversions to other media types.
+
+      "Work" shall mean the work of authorship, whether in Source or
+      Object form, made available under the License, as indicated by a
+      copyright notice that is included in or attached to the work
+      (an example is provided in the Appendix below).
+
+      "Derivative Works" shall mean any work, whether in Source or Object
+      form, that is based on (or derived from) the Work and for which the
+      editorial revisions, annotations, elaborations, or other modifications
+      represent, as a whole, an original work of authorship. For the purposes
+      of this License, Derivative Works shall not include works that remain
+      separable from, or merely link (or bind by name) to the interfaces of,
+      the Work and Derivative Works thereof.
+
+      "Contribution" shall mean any work of authorship, including
+      the original version of the Work and any modifications or additions
+      to that Work or Derivative Works thereof, that is intentionally
+      submitted to Licensor for inclusion in the Work by the copyright owner
+      or by an individual or Legal Entity authorized to submit on behalf of
+      the copyright owner. For the purposes of this definition, "submitted"
+      means any form of electronic, verbal, or written communication sent
+      to the Licensor or its representatives, including but not limited to
+      communication on electronic mailing lists, source code control systems,
+      and issue tracking systems that are managed by, or on behalf of, the
+      Licensor for the purpose of discussing and improving the Work, but
+      excluding communication that is conspicuously marked or otherwise
+      designated in writing by the copyright owner as "Not a Contribution."
+
+      "Contributor" shall mean Licensor and any individual or Legal Entity
+      on behalf of whom a Contribution has been received by Licensor and
+      subsequently incorporated within the Work.
+
+   2. Grant of Copyright License. Subject to the terms and conditions of
+      this License, each Contributor hereby grants to You a perpetual,
+      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+      copyright license to reproduce, prepare Derivative Works of,
+      publicly display, publicly perform, sublicense, and distribute the
+      Work and such Derivative Works in Source or Object form.
+
+   3. Grant of Patent License. Subject to the terms and conditions of
+      this License, each Contributor hereby grants to You a perpetual,
+      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+      (except as stated in this section) patent license to make, have made,
+      use, offer to sell, sell, import, and otherwise transfer the Work,
+      where such license applies only to those patent claims licensable
+      by such Contributor that are necessarily infringed by their
+      Contribution(s) alone or by combination of their Contribution(s)
+      with the Work to which such Contribution(s) was submitted. If You
+      institute patent litigation against any entity (including a
+      cross-claim or counterclaim in a lawsuit) alleging that the Work
+      or a Contribution incorporated within the Work constitutes direct
+      or contributory patent infringement, then any patent licenses
+      granted to You under this License for that Work shall terminate
+      as of the date such litigation is filed.
+
+   4. Redistribution. You may reproduce and distribute copies of the
+      Work or Derivative Works thereof in any medium, with or without
+      modifications, and in Source or Object form, provided that You
+      meet the following conditions:
+
+      (a) You must give any other recipients of the Work or
+          Derivative Works a copy of this License; and
+
+      (b) You must cause any modified files to carry prominent notices
+          stating that You changed the files; and
+
+      (c) You must retain, in the Source form of any Derivative Works
+          that You distribute, all copyright, patent, trademark, and
+          attribution notices from the Source form of the Work,
+          excluding those notices that do not pertain to any part of
+          the Derivative Works; and
+
+      (d) If the Work includes a "NOTICE" text file as part of its
+          distribution, then any Derivative Works that You distribute must
+          include a readable copy of the attribution notices contained
+          within such NOTICE file, excluding those notices that do not
+          pertain to any part of the Derivative Works, in at least one
+          of the following places: within a NOTICE text file distributed
+          as part of the Derivative Works; within the Source form or
+          documentation, if provided along with the Derivative Works; or,
+          within a display generated by the Derivative Works, if and
+          wherever such third-party notices normally appear. The contents
+          of the NOTICE file are for informational purposes only and
+          do not modify the License. You may add Your own attribution
+          notices within Derivative Works that You distribute, alongside
+          or as an addendum to the NOTICE text from the Work, provided
+          that such additional attribution notices cannot be construed
+          as modifying the License.
+
+      You may add Your own copyright statement to Your modifications and
+      may provide additional or different license terms and conditions
+      for use, reproduction, or distribution of Your modifications, or
+      for any such Derivative Works as a whole, provided Your use,
+      reproduction, and distribution of the Work otherwise complies with
+      the conditions stated in this License.
+
+   5. Submission of Contributions. Unless You explicitly state otherwise,
+      any Contribution intentionally submitted for inclusion in the Work
+      by You to the Licensor shall be under the terms and conditions of
+      this License, without any additional terms or conditions.
+      Notwithstanding the above, nothing herein shall supersede or modify
+      the terms of any separate license agreement you may have executed
+      with Licensor regarding such Contributions.
+
+   6. Trademarks. This License does not grant permission to use the trade
+      names, trademarks, service marks, or product names of the Licensor,
+      except as required for reasonable and customary use in describing the
+      origin of the Work and reproducing the content of the NOTICE file.
+
+   7. Disclaimer of Warranty. Unless required by applicable law or
+      agreed to in writing, Licensor provides the Work (and each
+      Contributor provides its Contributions) on an "AS IS" BASIS,
+      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
+      implied, including, without limitation, any warranties or conditions
+      of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
+      PARTICULAR PURPOSE. You are solely responsible for determining the
+      appropriateness of using or redistributing the Work and assume any
+      risks associated with Your exercise of permissions under this License.
+
+   8. Limitation of Liability. In no event and under no legal theory,
+      whether in tort (including negligence), contract, or otherwise,
+      unless required by applicable law (such as deliberate and grossly
+      negligent acts) or agreed to in writing, shall any Contributor be
+      liable to You for damages, including any direct, indirect, special,
+      incidental, or consequential damages of any character arising as a
+      result of this License or out of the use or inability to use the
+      Work (including but not limited to damages for loss of goodwill,
+      work stoppage, computer failure or malfunction, or any and all
+      other commercial damages or losses), even if such Contributor
+      has been advised of the possibility of such damages.
+
+   9. Accepting Warranty or Additional Liability. While redistributing
+      the Work or Derivative Works thereof, You may choose to offer,
+      and charge a fee for, acceptance of support, warranty, indemnity,
+      or other liability obligations and/or rights consistent with this
+      License. However, in accepting such obligations, You may act only
+      on Your own behalf and on Your sole responsibility, not on behalf
+      of any other Contributor, and only if You agree to indemnify,
+      defend, and hold each Contributor harmless for any liability
+      incurred by, or claims asserted against, such Contributor by reason
+      of your accepting any such warranty or additional liability.
+
+   END OF TERMS AND CONDITIONS
+
+   APPENDIX: How to apply the Apache License to your work.
+
+      To apply the Apache License to your work, attach the following
+      boilerplate notice, with the fields enclosed by brackets "[]"
+      replaced with your own identifying information. (Don't include
+      the brackets!)  The text should be enclosed in the appropriate
+      comment syntax for the file format. We also recommend that a
+      file or class name and description of purpose be included on the
+      same "printed page" as the copyright notice for easier
+      identification within third-party archives.
+
+   Copyright [yyyy] [name of copyright owner]
+
+   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.
diff --git a/tapestry-latest-java-tests/build.gradle b/tapestry-latest-java-tests/build.gradle
new file mode 100644
index 0000000..7e81295
--- /dev/null
+++ b/tapestry-latest-java-tests/build.gradle
@@ -0,0 +1,5 @@
+description = "Test suite for making sure Tapestry runs on latest Java"
+
+dependencies {
+    compile project(':tapestry-ioc')
+}
\ No newline at end of file
diff --git a/tapestry-mongodb/build.gradle b/tapestry-mongodb/build.gradle
index 7a7df39..5fb5b3c 100644
--- a/tapestry-mongodb/build.gradle
+++ b/tapestry-mongodb/build.gradle
@@ -1,14 +1,14 @@
 description = "Basic MongoDB services for Tapestry, useable outside of a Tapestry web application"
 
 dependencies {
-    compile project(':tapestry-ioc')
-    testCompile project(':tapestry-test')
+    implementation project(':tapestry-ioc')
+    testImplementation project(':tapestry-test')
 
-    compile group: 'org.mongodb', name: 'mongo-java-driver', version: '2.10.1'
+    implementation group: 'org.mongodb', name: 'mongo-java-driver', version: '2.10.1'
 
-    testCompile group: 'org.jongo', name: 'jongo', version: '0.3'
+    testImplementation group: 'org.jongo', name: 'jongo', version: '0.3'
 
-    testCompile "de.flapdoodle.embed:de.flapdoodle.embed.mongo:1.28"
+    testImplementation "de.flapdoodle.embed:de.flapdoodle.embed.mongo:1.28"
 }
 
 test {
diff --git a/tapestry-openapi-viewer/build.gradle b/tapestry-openapi-viewer/build.gradle
index a42b2ec..b6a62e6 100644
--- a/tapestry-openapi-viewer/build.gradle
+++ b/tapestry-openapi-viewer/build.gradle
@@ -1,8 +1,8 @@
 description = "Embedded OpenAPI (Swagger) viewer for Tapestry, based on Swagger UI"
 
 dependencies {
-    compile project(':tapestry-core')
-    testCompile "javax.servlet:javax.servlet-api:${versions.servletapi}"
+    implementation project(':tapestry-core')
+    testImplementation "javax.servlet:javax.servlet-api:${versions.servletapi}"
 }
 
 jar {
diff --git a/tapestry-rest-jackson/build.gradle b/tapestry-rest-jackson/build.gradle
index 7c9498a..d4605e5 100644
--- a/tapestry-rest-jackson/build.gradle
+++ b/tapestry-rest-jackson/build.gradle
@@ -1,9 +1,9 @@
 description = "Support for using Jackson Databind with the Tapestry REST support"
 
 dependencies {
-    compile project(':tapestry-core')
-    compile "com.fasterxml.jackson.core:jackson-databind:${versions.jackson}"
-    compile "com.github.victools:jsonschema-generator:${versions.jsonschemaGenerator}"
+    implementation project(':tapestry-core')
+    implementation "com.fasterxml.jackson.core:jackson-databind:${versions.jackson}"
+    implementation "com.github.victools:jsonschema-generator:${versions.jsonschemaGenerator}"
     provided "javax.servlet:javax.servlet-api:${versions.servletapi}"
 }
 
diff --git a/tapestry-runner/build.gradle b/tapestry-runner/build.gradle
index 0913bcc..3ec04ab 100644
--- a/tapestry-runner/build.gradle
+++ b/tapestry-runner/build.gradle
@@ -2,16 +2,16 @@ description = "Utilities for running a Tapestry application in Jetty or Tomcat a
 
 dependencies {
 
-    compile project(":tapestry-test-constants")
-    compile "org.eclipse.jetty:jetty-server:${versions.jetty}"
-    compile "org.eclipse.jetty:jetty-jndi:${versions.jetty}"
-    compile "org.eclipse.jetty:jetty-plus:${versions.jetty}"
-    compile "org.eclipse.jetty:jetty-webapp:${versions.jetty}"
+    implementation project(":tapestry-test-constants")
+    implementation "org.eclipse.jetty:jetty-server:${versions.jetty}"
+    implementation "org.eclipse.jetty:jetty-jndi:${versions.jetty}"
+    implementation "org.eclipse.jetty:jetty-plus:${versions.jetty}"
+    implementation "org.eclipse.jetty:jetty-webapp:${versions.jetty}"
 
-    compile "org.apache.tomcat:tomcat-catalina:${versions.tomcat}"
-    compile "org.apache.tomcat:tomcat-coyote:${versions.tomcat}"
-    runtime "org.apache.tomcat:tomcat-jasper:${versions.tomcat}"
+    implementation "org.apache.tomcat:tomcat-catalina:${versions.tomcat}"
+    implementation "org.apache.tomcat:tomcat-coyote:${versions.tomcat}"
+    implementation "org.apache.tomcat:tomcat-jasper:${versions.tomcat}"
 
-    compile "org.apache.tomcat:tomcat-dbcp:${versions.tomcat}"
-    compile "commons-cli:commons-cli:1.2"
+    implementation "org.apache.tomcat:tomcat-dbcp:${versions.tomcat}"
+    implementation "commons-cli:commons-cli:1.2"
 }
diff --git a/tapestry-spock/build.gradle b/tapestry-spock/build.gradle
index 5c94718..dc10977 100644
--- a/tapestry-spock/build.gradle
+++ b/tapestry-spock/build.gradle
@@ -1,11 +1,11 @@
 description = "Provides support Tapestry injections in Spock specifications"
 
 dependencies {
-	compile project(':commons')
-	compile project(':tapestry-ioc')
-	compile "org.spockframework:spock-core:${versions.spock}"
+	implementation project(':commons')
+	implementation project(':tapestry-ioc')
+	implementation "org.spockframework:spock-core:${versions.spock}"
 	
-	testCompile "javax.inject:javax.inject:1"
+	testImplementation "javax.inject:javax.inject:1"
 }
 
 test {
diff --git a/tapestry-spring/build.gradle b/tapestry-spring/build.gradle
index 42ac6f2..1b4bb0c 100644
--- a/tapestry-spring/build.gradle
+++ b/tapestry-spring/build.gradle
@@ -1,12 +1,12 @@
 description = "Integration of Tapestry with the Spring Inversion Of Control Container"
 
 dependencies {
-  compile project(':tapestry-core')
-  compile "org.springframework:spring-web:3.2.9.RELEASE"
+  implementation project(':tapestry-core')
+  implementation "org.springframework:spring-web:3.2.9.RELEASE"
 
   provided "javax.servlet:javax.servlet-api:${versions.servletapi}"
 
-  testCompile project(':tapestry-test')
+  testImplementation project(':tapestry-test')
 }
 
 jar {
diff --git a/tapestry-test-data/build.gradle b/tapestry-test-data/build.gradle
index 136263b..63229bc 100644
--- a/tapestry-test-data/build.gradle
+++ b/tapestry-test-data/build.gradle
@@ -1,5 +1,5 @@
 description = "Utilities for generating random data used when populating entities"
 
 dependencies {
-    compile "org.slf4j:slf4j-api:${versions.slf4j}"
+    implementation "org.slf4j:slf4j-api:${versions.slf4j}"
 }
diff --git a/tapestry-test/build.gradle b/tapestry-test/build.gradle
index 41ef97f..75432d9 100644
--- a/tapestry-test/build.gradle
+++ b/tapestry-test/build.gradle
@@ -2,18 +2,18 @@ description = "[Deprecated] Utilities for integration testing of Tapestry applic
 
 dependencies {
 
-  compile project(":tapestry-test-data")
-  compile project(":tapestry-runner")
+  implementation project(":tapestry-test-data")
+  implementation project(":tapestry-runner")
 
-  compile ("io.github.bonigarcia:webdrivermanager:2.2.4")
+  implementation ("io.github.bonigarcia:webdrivermanager:2.2.4")
 
-  compile "org.seleniumhq.selenium:selenium-leg-rc:${versions.selenium}", {
+  implementation "org.seleniumhq.selenium:selenium-leg-rc:${versions.selenium}", {
       exclude group: "org.seleniumhq.selenium", module: "jetty-repacked"
       exclude group: "org.testng", module: "testng"
       exclude group: "javax.servlet", module: "javax.servlet-api"
   }
-  compile "org.seleniumhq.selenium:selenium-support:${versions.selenium}"
+  implementation "org.seleniumhq.selenium:selenium-support:${versions.selenium}"
 
-  compile "org.testng:testng:${versions.testng}"
-  compile "org.easymock:easymock:${versions.easymock}"
+  implementation "org.testng:testng:${versions.testng}"
+  implementation "org.easymock:easymock:${versions.easymock}"
 }
diff --git a/tapestry-upload/build.gradle b/tapestry-upload/build.gradle
index 8e8574f..88971ab 100644
--- a/tapestry-upload/build.gradle
+++ b/tapestry-upload/build.gradle
@@ -1,12 +1,12 @@
 description = "File Upload component, with supporting services"
 
 dependencies {
-  compile project(':tapestry-core')
-  compile "commons-fileupload:commons-fileupload:1.3.2"
-  compile "commons-io:commons-io:2.4"
+  implementation project(':tapestry-core')
+  implementation "commons-fileupload:commons-fileupload:1.3.2"
+  implementation "commons-io:commons-io:2.4"
   provided "javax.servlet:javax.servlet-api:${versions.servletapi}"
 
-  testCompile project(':tapestry-test')
+  testImplementation project(':tapestry-test')
 }
 
 jar {
diff --git a/tapestry-version-migrator/build.gradle b/tapestry-version-migrator/build.gradle
index 8769d68..04a897d 100644
--- a/tapestry-version-migrator/build.gradle
+++ b/tapestry-version-migrator/build.gradle
@@ -1,7 +1,7 @@
 description = "Tool to help migrate source code using Tapestry from one version to another. Initially built for 5.7.0"
 
 dependencies {
-    testCompile group: 'org.testng', name: 'testng', version: '7.3.0'
+    testImplementation group: 'org.testng', name: 'testng', version: '7.3.0'
 }
 
 test {
diff --git a/tapestry-webresources/build.gradle b/tapestry-webresources/build.gradle
index 3f3db74..7121406 100644
--- a/tapestry-webresources/build.gradle
+++ b/tapestry-webresources/build.gradle
@@ -7,26 +7,26 @@ description = "Integration with WRO4J to perform runtime CoffeeScript compilatio
 //}
 
 dependencies {
-    compile project(":tapestry-core")
-    compile "com.github.sommeri:less4j:1.12.0"
-    compile "com.google.javascript:closure-compiler-unshaded:v20200504"
-    compile "org.mozilla:rhino:1.7.7.2"
+    implementation project(":tapestry-core")
+    implementation "com.github.sommeri:less4j:1.12.0"
+    implementation "com.google.javascript:closure-compiler-unshaded:v20200504"
+    implementation "org.mozilla:rhino:1.7.7.2"
 
-    testCompile project(":tapestry-runner")
-    testCompile "org.gebish:geb-spock:${versions.geb}", {
+    testImplementation project(":tapestry-runner")
+    testImplementation "org.gebish:geb-spock:${versions.geb}", {
 		exclude group: "org.codehaus.groovy", module: "groovy-all" // avoid multiple Groovy compilers on classpath
 	}
-    testCompile "org.spockframework:spock-tapestry:${versions.spock}", {
+    testImplementation "org.spockframework:spock-tapestry:${versions.spock}", {
     	exclude group: "org.apache.tapestry"
     }
     
-    testCompile "org.seleniumhq.selenium:selenium-java:${versions.selenium}", {
+    testImplementation "org.seleniumhq.selenium:selenium-java:${versions.selenium}", {
         exclude group: "org.eclipse.jetty"
     }
-    testCompile "org.seleniumhq.selenium:selenium-server:${versions.selenium}", {
+    testImplementation "org.seleniumhq.selenium:selenium-server:${versions.selenium}", {
         exclude group: "org.eclipse.jetty"
     }
-    testCompile ("io.github.bonigarcia:webdrivermanager:2.2.4")
+    testImplementation ("io.github.bonigarcia:webdrivermanager:2.2.4")
     
 }