This is an automated email from the ASF dual-hosted git repository.
gnodet pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/maven.git
The following commit(s) were added to refs/heads/master by this push:
new 549065b07d [#12353] Add jaxb2-maven-plugin to mvnup plugin upgrade
list (#12354)
549065b07d is described below
commit 549065b07dd17119be45293fe301826f47738527
Author: Guillaume Nodet <[email protected]>
AuthorDate: Thu Jun 25 15:18:05 2026 +0200
[#12353] Add jaxb2-maven-plugin to mvnup plugin upgrade list (#12354)
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 9ba2d04812..5deefae528 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 {