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

gnodet pushed a commit to branch maven-4.0.x
in repository https://gitbox.apache.org/repos/asf/maven.git


The following commit(s) were added to refs/heads/maven-4.0.x by this push:
     new 88d17aba97 [#12353] Add jaxb2-maven-plugin to mvnup plugin upgrade 
list (#12356)
88d17aba97 is described below

commit 88d17aba9751ebecfb82156d722c9534f61b28aa
Author: Guillaume Nodet <[email protected]>
AuthorDate: Thu Jun 25 15:17:57 2026 +0200

    [#12353] Add jaxb2-maven-plugin to mvnup plugin upgrade list (#12356)
    
    jaxb2-maven-plugin versions before 3.2.0 depend on jaxb-parent:3.0.0
    which contains `<Xlint:all />` — an element with an undeclared namespace
    prefix. Maven 4's namespace-aware StAX parser rejects this invalid XML,
    causing transitive dependencies (jaxb-core, jaxb-impl) to be lost from
    the plugin classrealm, resulting in ClassNotFoundException at runtime.
    
    jaxb-parent:3.0.2 (used by jaxb2-maven-plugin 3.2.0+) fixed this by
    using `<compilerArgument>-Xlint:all</compilerArgument>` instead.
    
    Co-authored-by: Claude Opus 4.6 <[email protected]>
---
 .../invoker/mvnup/goals/PluginUpgradeStrategy.java | 10 +++++-
 .../mvnup/goals/PluginUpgradeStrategyTest.java     | 39 ++++++++++++++++++++++
 2 files changed, 48 insertions(+), 1 deletion(-)

diff --git 
a/impl/maven-cli/src/main/java/org/apache/maven/cling/invoker/mvnup/goals/PluginUpgradeStrategy.java
 
b/impl/maven-cli/src/main/java/org/apache/maven/cling/invoker/mvnup/goals/PluginUpgradeStrategy.java
index 8df694b2e2..abf89d03d0 100644
--- 
a/impl/maven-cli/src/main/java/org/apache/maven/cling/invoker/mvnup/goals/PluginUpgradeStrategy.java
+++ 
b/impl/maven-cli/src/main/java/org/apache/maven/cling/invoker/mvnup/goals/PluginUpgradeStrategy.java
@@ -98,7 +98,12 @@ public class PluginUpgradeStrategy extends 
AbstractUpgradeStrategy {
                     DEFAULT_MAVEN_PLUGIN_GROUP_ID,
                     "maven-resources-plugin",
                     "3.3.1",
-                    "Beta/RC versions compiled against different Maven 4 API 
signatures"));
+                    "Beta/RC versions compiled against different Maven 4 API 
signatures"),
+            new PluginUpgrade(
+                    "org.codehaus.mojo",
+                    "jaxb2-maven-plugin",
+                    "3.2.0",
+                    "Versions before 3.2.0 depend on jaxb-parent:3.0.0 which 
contains invalid XML rejected by Maven 4"));
 
     private static final List<PluginUpgrade> PLUGIN_DEPENDENCY_UPGRADES = 
List.of(new PluginUpgrade(
             "org.codehaus.mojo",
@@ -275,6 +280,9 @@ private Map<String, PluginUpgradeInfo> 
getPluginUpgradesMap() {
         upgrades.put(
                 DEFAULT_MAVEN_PLUGIN_GROUP_ID + ":maven-resources-plugin",
                 new PluginUpgradeInfo(DEFAULT_MAVEN_PLUGIN_GROUP_ID, 
"maven-resources-plugin", "3.3.1"));
+        upgrades.put(
+                "org.codehaus.mojo:jaxb2-maven-plugin",
+                new PluginUpgradeInfo("org.codehaus.mojo", 
"jaxb2-maven-plugin", "3.2.0"));
         return upgrades;
     }
 
diff --git 
a/impl/maven-cli/src/test/java/org/apache/maven/cling/invoker/mvnup/goals/PluginUpgradeStrategyTest.java
 
b/impl/maven-cli/src/test/java/org/apache/maven/cling/invoker/mvnup/goals/PluginUpgradeStrategyTest.java
index 5315cf1ad8..8c73fdce7f 100644
--- 
a/impl/maven-cli/src/test/java/org/apache/maven/cling/invoker/mvnup/goals/PluginUpgradeStrategyTest.java
+++ 
b/impl/maven-cli/src/test/java/org/apache/maven/cling/invoker/mvnup/goals/PluginUpgradeStrategyTest.java
@@ -430,6 +430,45 @@ void shouldUpgradeSurefireReportPluginWhenBelowMinimum() 
throws Exception {
             assertEquals("3.5.2", version);
         }
 
+        @Test
+        @DisplayName("should upgrade jaxb2-maven-plugin when below minimum")
+        void shouldUpgradeJaxb2MavenPluginWhenBelowMinimum() throws Exception {
+            String pomXml = """
+                <?xml version="1.0" encoding="UTF-8"?>
+                <project xmlns="http://maven.apache.org/POM/4.0.0";>
+                    <modelVersion>4.0.0</modelVersion>
+                    <groupId>test</groupId>
+                    <artifactId>test</artifactId>
+                    <version>1.0.0</version>
+                    <build>
+                        <plugins>
+                            <plugin>
+                                <groupId>org.codehaus.mojo</groupId>
+                                <artifactId>jaxb2-maven-plugin</artifactId>
+                                <version>3.1.0</version>
+                            </plugin>
+                        </plugins>
+                    </build>
+                </project>
+                """;
+
+            Document document = Document.of(pomXml);
+            Map<Path, Document> pomMap = Map.of(Paths.get("pom.xml"), 
document);
+
+            UpgradeContext context = createMockContext();
+            UpgradeResult result = strategy.doApply(context, pomMap);
+
+            assertTrue(result.success(), "Plugin upgrade should succeed");
+            assertTrue(result.modifiedCount() > 0, "Should have upgraded 
jaxb2-maven-plugin");
+
+            Editor editor = new Editor(document);
+            Element root = editor.root();
+            String version = root.path("build", "plugins", "plugin", "version")
+                    .map(Element::textContentTrimmed)
+                    .orElse(null);
+            assertEquals("3.2.0", version);
+        }
+
         @Test
         @DisplayName("should not upgrade when version is already higher")
         void shouldNotUpgradeWhenVersionAlreadyHigher() throws Exception {

Reply via email to