From a747f5be6ae51281a946cd29cbecd86d896c5e0c Mon Sep 17 00:00:00 2001 From: Elliotte Rusty Harold Date: Sat, 4 Jul 2026 14:33:39 +0000 Subject: [PATCH 1/2] fix: treat null classifier as empty string in OverlayManager Objects.toString(x) converts null to the literal string "null", rather than "". This caused overlay-to-artifact matching to fail when one side had a null classifier and the other had an empty string, contradicting the documented MWAR-241 intent. Fixes #621 --- .../plugins/war/overlay/OverlayManager.java | 2 +- .../war/overlay/OverlayManagerTest.java | 19 +++++++++++++++++++ 2 files changed, 20 insertions(+), 1 deletion(-) diff --git a/src/main/java/org/apache/maven/plugins/war/overlay/OverlayManager.java b/src/main/java/org/apache/maven/plugins/war/overlay/OverlayManager.java index bf4193bf..48c6e6ec 100644 --- a/src/main/java/org/apache/maven/plugins/war/overlay/OverlayManager.java +++ b/src/main/java/org/apache/maven/plugins/war/overlay/OverlayManager.java @@ -203,7 +203,7 @@ private boolean compareOverlayWithArtifact(Overlay overlay, Artifact artifact) { && Objects.equals(overlay.getType(), artifact.getType()) // MWAR-241 Make sure to treat null and "" as equal when comparing the classifier && Objects.equals( - Objects.toString(overlay.getClassifier()), Objects.toString(artifact.getClassifier()))); + Objects.toString(overlay.getClassifier(), ""), Objects.toString(artifact.getClassifier(), ""))); } /** diff --git a/src/test/java/org/apache/maven/plugins/war/overlay/OverlayManagerTest.java b/src/test/java/org/apache/maven/plugins/war/overlay/OverlayManagerTest.java index 68ba8b2a..1f874c0e 100644 --- a/src/test/java/org/apache/maven/plugins/war/overlay/OverlayManagerTest.java +++ b/src/test/java/org/apache/maven/plugins/war/overlay/OverlayManagerTest.java @@ -125,6 +125,25 @@ void testCustomCurrentProject() throws Exception { assertEquals(new DefaultOverlay(second), manager.getOverlays().get(2)); } + @Test + void testNullClassifierMatchesEmptyClassifier() throws Exception { + final MavenProjectArtifactsStub project = new MavenProjectArtifactsStub(); + final ArtifactStub artifact = newWarArtifact("test", "test-webapp", ""); + project.addArtifact(artifact); + + final List overlays = new ArrayList<>(); + Overlay overlay = new Overlay("test", "test-webapp"); + overlay.setClassifier(null); + overlay.setType("war"); + overlays.add(overlay); + + final Overlay currentProjectOverlay = Overlay.createInstance(); + OverlayManager manager = + new OverlayManager(overlays, project, DEFAULT_INCLUDES, DEFAULT_EXCLUDES, currentProjectOverlay); + assertNotNull(manager.getOverlays()); + assertEquals(2, manager.getOverlays().size()); + } + @Test void testOverlaysWithSameArtifactAndGroupId() throws Exception { From 8efba55a827039e1c04ae704ea16c316fbf4b810 Mon Sep 17 00:00:00 2001 From: Elliotte Rusty Harold Date: Sun, 26 Jul 2026 12:03:52 +0000 Subject: [PATCH 2/2] Address Copilot review: verify overlay actually matched artifact --- .../apache/maven/plugins/war/overlay/OverlayManagerTest.java | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/test/java/org/apache/maven/plugins/war/overlay/OverlayManagerTest.java b/src/test/java/org/apache/maven/plugins/war/overlay/OverlayManagerTest.java index 1f874c0e..84fec1f0 100644 --- a/src/test/java/org/apache/maven/plugins/war/overlay/OverlayManagerTest.java +++ b/src/test/java/org/apache/maven/plugins/war/overlay/OverlayManagerTest.java @@ -31,6 +31,7 @@ import static org.apache.maven.plugins.war.Overlay.DEFAULT_INCLUDES; import static org.junit.jupiter.api.Assertions.assertEquals; import static org.junit.jupiter.api.Assertions.assertNotNull; +import static org.junit.jupiter.api.Assertions.assertSame; import static org.junit.jupiter.api.Assertions.assertThrows; /** @@ -142,6 +143,8 @@ void testNullClassifierMatchesEmptyClassifier() throws Exception { new OverlayManager(overlays, project, DEFAULT_INCLUDES, DEFAULT_EXCLUDES, currentProjectOverlay); assertNotNull(manager.getOverlays()); assertEquals(2, manager.getOverlays().size()); + assertEquals(currentProjectOverlay, manager.getOverlays().get(0)); + assertSame(artifact, manager.getOverlays().get(1).getArtifact()); } @Test