This is an automated email from the ASF dual-hosted git repository.
rzo1 pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/tomee.git
The following commit(s) were added to refs/heads/main by this push:
new 2cd5569ef0 TOMEE-4706 migrate the Gradle plugin to a current Gradle
version
2cd5569ef0 is described below
commit 2cd5569ef0e0fa47b0ab3097520885db3ff827b2
Author: Richard Zowalla <[email protected]>
AuthorDate: Sun Sep 20 20:31:22 2026 +0200
TOMEE-4706 migrate the Gradle plugin to a current Gradle version
The plugin was built against Gradle 3.0 and did not work with current
Gradle.
org.gradle:gradle-core was never published past 6.1.1, so it cannot express
a
modern Gradle API dependency from Maven. The module uses
dev.gradleplugins:gradle-api instead, which is the Gradle API packaged as a
Maven artifact, the equivalent of gradleApi() in a Gradle build. It comes
from
Maven Central, so the repo.gradle.org repository that only gradle-core
needed
is dropped.
Removed and deprecated API:
Project.getBuildDir() is deprecated since Gradle 8 and removed in Gradle
9,
and is replaced with project.getLayout().getBuildDirectory().
org.gradle.util.GFileUtils is no longer public API, so the two call sites
use
java.nio.file.Files.
fixConfig() called classpath.add(...) on the classpath field inside
if (classpath == null). It only avoided a NullPointerException when the
argument expression threw UnknownConfigurationException first. It now
assigns
the configuration, which is what was meant.
Gradle 9 fails the build on invalid task properties:
@Optional is dropped from 12 primitive properties, since a primitive
always
has a value.
serverXml, docBase, workDir, modules and classpath were @Input, which is
not
allowed for File and FileCollection types. The task starts a blocking
server
and never takes part in up-to-date checking, and its values are injected
reflectively from the extension rather than through Gradle's property
mechanism, so they are @Internal.
singleClassloader, conf and classloaderFilteredPackages were annotated
but had
no getter, so Gradle ignored the annotation and warned. They have getters
now.
TomEEEmbeddedExtension.isSkipDefaultRepository() returned a boxed Boolean,
which
is not a valid bean property with an is- prefix and is deprecated for
removal in
Gradle 10. The field and the setter were already primitive, so the getter is
boolean now. The caller's null check was always true for an autoboxed
primitive
and is removed, so behaviour is unchanged.
Verified against Gradle 9.5.1 with a sample project: the plugin applies, the
extension configuration reaches the task, dependencies resolve, TomEE
Embedded
boots, the deployed webapp answers HTTP 200, and exit shuts it down cleanly.
One deprecation is left: the task calls getProject() from its @TaskAction,
which
the configuration cache does not allow and Gradle 10 will reject. Capturing
the
project state at configuration time is a larger refactor, left for its own
change.
---
.../gradle/embedded/TomEEEmbeddedExtension.java | 2 +-
.../tomee/gradle/embedded/TomEEEmbeddedPlugin.java | 2 +-
.../tomee/gradle/embedded/TomEEEmbeddedTask.java | 69 +++++++++++-----------
gradle/pom.xml | 26 +++++---
4 files changed, 54 insertions(+), 45 deletions(-)
diff --git
a/gradle/gradle-tomee-embedded/src/main/java/org/apache/tomee/gradle/embedded/TomEEEmbeddedExtension.java
b/gradle/gradle-tomee-embedded/src/main/java/org/apache/tomee/gradle/embedded/TomEEEmbeddedExtension.java
index 98ef2b0a17..200c978e3c 100644
---
a/gradle/gradle-tomee-embedded/src/main/java/org/apache/tomee/gradle/embedded/TomEEEmbeddedExtension.java
+++
b/gradle/gradle-tomee-embedded/src/main/java/org/apache/tomee/gradle/embedded/TomEEEmbeddedExtension.java
@@ -65,7 +65,7 @@ public class TomEEEmbeddedExtension {
private String dir;
private String conf;
- public Boolean isSkipDefaultRepository() {
+ public boolean isSkipDefaultRepository() {
return skipDefaultRepository;
}
diff --git
a/gradle/gradle-tomee-embedded/src/main/java/org/apache/tomee/gradle/embedded/TomEEEmbeddedPlugin.java
b/gradle/gradle-tomee-embedded/src/main/java/org/apache/tomee/gradle/embedded/TomEEEmbeddedPlugin.java
index a80078c7a3..3c373fa49a 100644
---
a/gradle/gradle-tomee-embedded/src/main/java/org/apache/tomee/gradle/embedded/TomEEEmbeddedPlugin.java
+++
b/gradle/gradle-tomee-embedded/src/main/java/org/apache/tomee/gradle/embedded/TomEEEmbeddedPlugin.java
@@ -52,7 +52,7 @@ public class TomEEEmbeddedPlugin implements Plugin<Project> {
if (extension == null) {
return;
}
- if (extension.isSkipDefaultRepository() != null &&
!extension.isSkipDefaultRepository()) {
+ if (!extension.isSkipDefaultRepository()) {
actionProject.getRepositories().mavenCentral();
return;
}
diff --git
a/gradle/gradle-tomee-embedded/src/main/java/org/apache/tomee/gradle/embedded/TomEEEmbeddedTask.java
b/gradle/gradle-tomee-embedded/src/main/java/org/apache/tomee/gradle/embedded/TomEEEmbeddedTask.java
index d06ea541e2..950eb59a9a 100644
---
a/gradle/gradle-tomee-embedded/src/main/java/org/apache/tomee/gradle/embedded/TomEEEmbeddedTask.java
+++
b/gradle/gradle-tomee-embedded/src/main/java/org/apache/tomee/gradle/embedded/TomEEEmbeddedTask.java
@@ -23,11 +23,12 @@ import org.gradle.api.Project;
import org.gradle.api.artifacts.Configuration;
import org.gradle.api.artifacts.UnknownConfigurationException;
import org.gradle.api.tasks.Input;
+import org.gradle.api.tasks.Internal;
import org.gradle.api.tasks.Optional;
import org.gradle.api.tasks.TaskAction;
-import org.gradle.util.GFileUtils;
import java.io.File;
+import java.nio.file.Files;
import java.lang.reflect.Field;
import java.net.MalformedURLException;
import java.net.URL;
@@ -48,19 +49,15 @@ import static java.util.Arrays.asList;
import static java.util.Collections.singletonList;
public class TomEEEmbeddedTask extends DefaultTask {
- @Optional
@Input
private int httpPort = 8080;
- @Optional
@Input
private int httpsPort = 8443;
- @Optional
@Input
private int ajpPort = 8009;
- @Optional
@Input
private int stopPort = 8005;
@@ -92,27 +89,20 @@ public class TomEEEmbeddedTask extends DefaultTask {
@Input
private String sslProtocol;
- @Optional
- @Input
+ @Internal
private File serverXml;
- @Optional
- @Input
private boolean singleClassloader = false;
- @Optional
@Input
private boolean ssl = false;
- @Optional
@Input
private boolean withEjbRemote = false;
- @Optional
@Input
private boolean quickSession;
- @Optional
@Input
private boolean skipHttp = false;
@@ -120,15 +110,12 @@ public class TomEEEmbeddedTask extends DefaultTask {
@Input
private Collection<String> applicationScopes = new
HashSet<>(asList("compile", "runtime"));
- @Optional
- @Input
private Collection<String> classloaderFilteredPackages;
@Optional
@Input
private Collection<String> customWebResources;
- @Optional
@Input
private boolean webResourceCached = true;
@@ -140,7 +127,6 @@ public class TomEEEmbeddedTask extends DefaultTask {
@Input
private Map<String, String> containerProperties;
- @Optional
@Input
private boolean keepServerXmlAsThis = false;
@@ -152,7 +138,6 @@ public class TomEEEmbeddedTask extends DefaultTask {
@Input
private Map<String, String> roles;
- @Optional
@Input
private boolean forceJspDevelopment = true;
@@ -164,24 +149,19 @@ public class TomEEEmbeddedTask extends DefaultTask {
@Input
private String inlinedTomEEXml;
- @Optional
- @Input
+ @Internal
private File workDir;
- @Optional
- @Input
+ @Internal
private List<File> modules;
- @Optional
- @Input
+ @Internal
private File docBase;
@Optional
@Input
private String dir;
- @Optional
- @Input
private String conf;
/* TODO if needed
@@ -192,6 +172,7 @@ public class TomEEEmbeddedTask extends DefaultTask {
private boolean withLiveReload;
*/
+ @Internal
private Configuration classpath;
@TaskAction
@@ -208,13 +189,18 @@ public class TomEEEmbeddedTask extends DefaultTask {
}
}
+ // Project.getBuildDir() is deprecated since Gradle 8 and gone in Gradle 9
+ private static File buildDir(final Project project) {
+ return project.getLayout().getBuildDirectory().get().getAsFile();
+ }
+
private void fixConfig() {
final Project project = getProject();
// defaults
if (classpath == null) {
try {
-
classpath.add(project.getConfigurations().getByName(TomEEEmbeddedExtension.ALIAS).fileCollection());
+ classpath =
project.getConfigurations().getByName(TomEEEmbeddedExtension.ALIAS);
} catch (final UnknownConfigurationException uce) {
classpath =
project.getConfigurations().getByName(TomEEEmbeddedExtension.NAME);
}
@@ -224,13 +210,13 @@ public class TomEEEmbeddedTask extends DefaultTask {
docBase = new File(project.getProjectDir(), "src/main/webapp");
}
if (workDir == null) {
- workDir = new File(project.getBuildDir(), "tomee-embedded/work");
+ workDir = new File(buildDir(project), "tomee-embedded/work");
}
if (dir == null) {
- dir = new File(project.getBuildDir(),
"tomee-embedded/run").getAbsolutePath();
+ dir = new File(buildDir(project),
"tomee-embedded/run").getAbsolutePath();
}
if (modules == null || modules.isEmpty()) {
- final File main = new File(project.getBuildDir(), "classes/main");
+ final File main = new File(buildDir(project), "classes/main");
if (main.isDirectory()) {
modules = new ArrayList<>(singletonList(main));
}
@@ -275,9 +261,9 @@ public class TomEEEmbeddedTask extends DefaultTask {
throw new GradleException("you can't define a server.xml and
an inlinedServerXml");
}
try {
- GFileUtils.mkdirs(workDir);
+ Files.createDirectories(workDir.toPath());
serverXml = new File(workDir, "server.xml_dump");
- GFileUtils.writeFile(inlinedServerXml, serverXml);
+ Files.writeString(serverXml.toPath(), inlinedServerXml);
} catch (final Exception e) {
throw new GradleException(e.getMessage(), e);
}
@@ -301,8 +287,8 @@ public class TomEEEmbeddedTask extends DefaultTask {
if (inlinedTomEEXml != null && inlinedTomEEXml.trim().isEmpty()) {
try {
final File conf = new File(dir, "conf");
- GFileUtils.mkdirs(conf);
- GFileUtils.writeFile(inlinedTomEEXml, new File(conf,
"tomee.xml"));
+ Files.createDirectories(conf.toPath());
+ Files.writeString(new File(conf, "tomee.xml").toPath(),
inlinedTomEEXml);
} catch (final Exception e) {
throw new GradleException(e.getMessage(), e);
}
@@ -713,6 +699,21 @@ public class TomEEEmbeddedTask extends DefaultTask {
this.classpath = classpath;
}
+ @Internal
+ public boolean isSingleClassloader() {
+ return singleClassloader;
+ }
+
+ @Internal
+ public String getConf() {
+ return conf;
+ }
+
+ @Internal
+ public Collection<String> getClassloaderFilteredPackages() {
+ return classloaderFilteredPackages;
+ }
+
public void setSingleClassloader(final boolean singleClassloader) {
this.singleClassloader = singleClassloader;
}
diff --git a/gradle/pom.xml b/gradle/pom.xml
index b30140ddaa..dfca2e8b1d 100644
--- a/gradle/pom.xml
+++ b/gradle/pom.xml
@@ -28,15 +28,29 @@
<name>TomEE :: Gradle Plugins</name>
<packaging>pom</packaging>
+ <properties>
+ <version.gradle>8.11.1</version.gradle>
+ </properties>
+
<modules>
<module>gradle-tomee-embedded</module>
</modules>
<dependencies>
<dependency>
- <groupId>org.gradle</groupId>
- <artifactId>gradle-core</artifactId>
- <version>3.0</version>
+ <!--
+ The Gradle API as a Maven artifact, which is what gradleApi() gives a
Gradle
+ build. org.gradle:gradle-core was never published past 6.1.1.
+ -->
+ <groupId>dev.gradleplugins</groupId>
+ <artifactId>gradle-api</artifactId>
+ <version>${version.gradle}</version>
+ <scope>provided</scope>
+ </dependency>
+ <dependency>
+ <groupId>org.slf4j</groupId>
+ <artifactId>slf4j-api</artifactId>
+ <version>${version.slf4j}</version>
<scope>provided</scope>
</dependency>
<dependency>
@@ -47,10 +61,4 @@
</dependency>
</dependencies>
- <repositories>
- <repository>
- <id>gradle-libs-releases-local</id>
- <url>https://repo.gradle.org/gradle/libs-releases-local/</url>
- </repository>
- </repositories>
</project>