Richard Zowalla created TOMEE-4706:
--------------------------------------

             Summary: Migrate the Gradle plugin to a current Gradle version
                 Key: TOMEE-4706
                 URL: https://issues.apache.org/jira/browse/TOMEE-4706
             Project: TomEE
          Issue Type: Task
            Reporter: Richard Zowalla
             Fix For: 11.0.0


The Gradle plugin was built against Gradle 3.0 and did not work with current
Gradle.

h3. Gradle API artifact

{{org.gradle:gradle\-core}} was never published past 6.1.1, so it cannot express
a modern Gradle API dependency from Maven. The module now uses
{{dev.gradleplugins:gradle\-api}} 8.11.1, which is the Gradle API packaged as a
Maven artifact, equivalent to what {{gradleApi\(\)}} gives a Gradle build.

h3. Removed and deprecated API* {{Project.getBuildDir\(\)}} is deprecated since 
Gradle 8 and removed in Gradle 9.
Replaced with {{project.getLayout\(\).getBuildDirectory\(\)}}.
* {{org.gradle.util.GFileUtils}} is no longer public API. The two call sites use
{{java.nio.file.Files}} instead.
* {{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.

h3. Task property validation

Gradle 9 fails the build on invalid task properties. Fixed:

* {{@Optional}} on 12 primitive properties. A primitive always has a value.
* {{@Input}} on {{File}} and {{List}} properties \({{serverXml}},
{{docBase}}, {{workDir}}, {{modules}}\) and on {{classpath}}. This task starts a
blocking server and never takes part in up\-to\-date checking, and the values 
are
injected reflectively from the extension rather than through Gradle's property
mechanism, so they are {{@Internal}}.
* Three fields were annotated but had no getter, so Gradle ignored the 
annotation
and warned: {{singleClassloader}}, {{conf}} and {{classloaderFilteredPackages}}
now have getters.

h3. Gradle 10 readiness

{{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 setter were already 
primitive,
so the getter is now {{boolean}}. The caller's null check was always true for an
autoboxed primitive and is removed, so behaviour is unchanged.

h3. Verification

Built and run against Gradle 9.5.1 with a sample project: the plugin applies, 
the
extension configuration reaches the task, dependencies resolve, TomEE Embedded
boots and the deployed webapp answers HTTP 200. No deprecation warnings remain
from the plugin.

Note the task is interactive: it blocks reading stdin for "exit" or "quit", so
with stdin closed it starts and returns immediately. That behaviour is 
unchanged.





--
This message was sent by Atlassian Jira
(v8.20.10#820010)

Reply via email to