[
https://issues.apache.org/jira/browse/ATLAS-5432?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
]
sanket bhor updated ATLAS-5432:
-------------------------------
Description:
The CI pipeline has two issues affecting all PRs:
*1. Enunciate Maven plugin fails on JDK 8 :*
The JDK 8 build fails during the Enunciate documentation generation phase with:
{code:java}
[ERROR] Failed to execute goal
com.webcohesion.enunciate:enunciate-maven-plugin:2.13.2:docs (default) on
project atlas-webapp: Execution default of goal
com.webcohesion.enunciate:enunciate-maven-plugin:2.13.2:docs failed:A required
class was missing while executing
com.webcohesion.enunciate:enunciate-maven-plugin:2.13.2:docs:
com/sun/tools/javac/api/JavacTool {code}
*Root Cause : What triggered the failure*
The GitHub Actions ubuntu-22.04 runner image 20261004.315 (published Oct 5,
2026) silently upgraded Maven from 3.9.16 to 3.10.0. Maven 3.10.0 ships Maven
Resolver 2.x (up from Resolver 1.x in 3.9.16), which is stricter about
system-scoped dependencies.
runs-on: ubuntu-22.04 is a floating image tag — GitHub auto-rolls the VM image
weekly. Atlas has no Maven wrapper (mvnw) and no actions/setup-maven step, so
Maven comes entirely from the runner image. The upgrade happened with zero code
changes.
*How Maven Resolver 2.x breaks Enunciate 2.13.2*
{*}Maven Resolver 2.x behavior change (apache/maven#12948){*}: Dependency
management entries that declare system scope or a systemPath in POMs resolved
from a repository are now actively dropped and a warning is logged. In Resolver
1.x (Maven 3.9.x and earlier), these entries were tolerated and passed through
to plugin classloaders.
*How this affects Enunciate 2.13.2:*
1. Enunciate 2.13.2's core class (Enunciate.java) directly imports
com.sun.tools.javac.api.JavacTool — an internal JDK class that lives in
tools.jar on JDK 8.
2. The enunciate-javac-support module declares tools.jar as a system-scoped
dependency via a profile:
<scope>system</scope>
<systemPath>${java.home}/../lib/tools.jar</systemPath>
3. System-scoped dependencies are not transitive in Maven's dependency model —
they never reach downstream consumers' classloaders.
4. Under Resolver 1.x (Maven ≤ 3.9.x), this was a latent bug — tools.jar
happened to be available on the JVM boot classpath, so the missing transitive
dep was masked.
5. Under Resolver 2.x (Maven 3.10.0+), system-scoped entries are actively
stripped from resolved POMs. Combined with the non-transitive nature, tools.jar
is completely absent from the enunciate-maven-plugin classloader → JavacTool
class not found → build fails.
Upstream issue: stoicflame/enunciate#1244 (opened Oct 2, 2026 — still open, no
fix released).
*Why JDK 17 builds are NOT affected*
The jdk-17 Maven profile (in root pom.xml) switches to Enunciate 2.15.0, which:
- Dropped the tools.jar / enunciate-javac-support dependency entirely
- Uses javax.tools.ToolProvider.getSystemJavaCompiler() — the public standard
API that requires no system-scoped dependency
- Has zero system-scoped dependencies, so Maven Resolver 2.x has nothing to
strip
*2. JDK 8 failure cancels JDK 17 build :*
The CI matrix strategy uses the default fail-fast: true, which means when the
JDK 8 job fails, the JDK 17 job is cancelled. Both jobs should run
independently.
was:
The CI pipeline has two issues affecting all PRs:
*1. Enunciate Maven plugin fails on JDK 8 :*
The JDK 8 build fails during the Enunciate documentation generation phase with:
{code:java}
[ERROR] Failed to execute goal
com.webcohesion.enunciate:enunciate-maven-plugin:2.13.2:docs (default) on
project atlas-webapp: Execution default of goal
com.webcohesion.enunciate:enunciate-maven-plugin:2.13.2:docs failed:A required
class was missing while executing
com.webcohesion.enunciate:enunciate-maven-plugin:2.13.2:docs:
com/sun/tools/javac/api/JavacTool {code}
Root cause: Enunciate 2.13.2 (used for JDK < 17) depends on
enunciate-javac-support, which requires com.sun.tools.javac.api.JavacTool from
tools.jar. The enunciate-javac-support POM declares tools.jar as a
system-scoped dependency via a profile, but system-scoped dependencies are not
transitive in Maven — so tools.jar never reaches the enunciate-maven-plugin
classloader. This was a latent issue exposed by a GitHub Actions runner
image update (Temurin JDK 8 distribution update) that changed how tools.jar is
loaded at JVM boot time.
No changes were made to the CI workflow
file (ci.yml) or Enunciate configuration — this is an environment-level change.
*2. JDK 8 failure cancels JDK 17 build :*
The CI matrix strategy uses the default fail-fast: true, which means when the
JDK 8 job fails, the JDK 17 job is cancelled. Both jobs should run
independently.
> CI: Fix Enunciate JDK 8 build failure and enable parallel matrix execution
> --------------------------------------------------------------------------
>
> Key: ATLAS-5432
> URL: https://issues.apache.org/jira/browse/ATLAS-5432
> Project: Atlas
> Issue Type: Task
> Reporter: sanket bhor
> Assignee: sanket bhor
> Priority: Major
> Time Spent: 10m
> Remaining Estimate: 0h
>
> The CI pipeline has two issues affecting all PRs:
>
> *1. Enunciate Maven plugin fails on JDK 8 :*
> The JDK 8 build fails during the Enunciate documentation generation phase
> with:
> {code:java}
> [ERROR] Failed to execute goal
> com.webcohesion.enunciate:enunciate-maven-plugin:2.13.2:docs (default) on
> project atlas-webapp: Execution default of goal
> com.webcohesion.enunciate:enunciate-maven-plugin:2.13.2:docs failed:A
> required class was missing while executing
> com.webcohesion.enunciate:enunciate-maven-plugin:2.13.2:docs:
> com/sun/tools/javac/api/JavacTool {code}
> *Root Cause : What triggered the failure*
> The GitHub Actions ubuntu-22.04 runner image 20261004.315 (published Oct 5,
> 2026) silently upgraded Maven from 3.9.16 to 3.10.0. Maven 3.10.0 ships Maven
> Resolver 2.x (up from Resolver 1.x in 3.9.16), which is stricter about
> system-scoped dependencies.
> runs-on: ubuntu-22.04 is a floating image tag — GitHub auto-rolls the VM
> image weekly. Atlas has no Maven wrapper (mvnw) and no actions/setup-maven
> step, so Maven comes entirely from the runner image. The upgrade happened
> with zero code changes.
> *How Maven Resolver 2.x breaks Enunciate 2.13.2*
> {*}Maven Resolver 2.x behavior change (apache/maven#12948){*}: Dependency
> management entries that declare system scope or a systemPath in POMs resolved
> from a repository are now actively dropped and a warning is logged. In
> Resolver 1.x (Maven 3.9.x and earlier), these entries were tolerated and
> passed through to plugin classloaders.
> *How this affects Enunciate 2.13.2:*
> 1. Enunciate 2.13.2's core class (Enunciate.java) directly imports
> com.sun.tools.javac.api.JavacTool — an internal JDK class that lives in
> tools.jar on JDK 8.
> 2. The enunciate-javac-support module declares tools.jar as a system-scoped
> dependency via a profile:
> <scope>system</scope>
> <systemPath>${java.home}/../lib/tools.jar</systemPath>
> 3. System-scoped dependencies are not transitive in Maven's dependency model
> — they never reach downstream consumers' classloaders.
> 4. Under Resolver 1.x (Maven ≤ 3.9.x), this was a latent bug — tools.jar
> happened to be available on the JVM boot classpath, so the missing transitive
> dep was masked.
> 5. Under Resolver 2.x (Maven 3.10.0+), system-scoped entries are actively
> stripped from resolved POMs. Combined with the non-transitive nature,
> tools.jar is completely absent from the enunciate-maven-plugin classloader →
> JavacTool class not found → build fails.
> Upstream issue: stoicflame/enunciate#1244 (opened Oct 2, 2026 — still open,
> no fix released).
> *Why JDK 17 builds are NOT affected*
> The jdk-17 Maven profile (in root pom.xml) switches to Enunciate 2.15.0,
> which:
> - Dropped the tools.jar / enunciate-javac-support dependency entirely
> - Uses javax.tools.ToolProvider.getSystemJavaCompiler() — the public standard
> API that requires no system-scoped dependency
> - Has zero system-scoped dependencies, so Maven Resolver 2.x has nothing to
> strip
>
> *2. JDK 8 failure cancels JDK 17 build :*
> The CI matrix strategy uses the default fail-fast: true, which means when the
> JDK 8 job fails, the JDK 17 job is cancelled. Both jobs should run
> independently.
--
This message was sent by Atlassian Jira
(v8.20.10#820010)