From 30a629f949b403876691c26d6b88a94c96aadc72 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Efe=20G=C3=B6kdemir?= Date: Thu, 24 Sep 2026 10:30:45 +0300 Subject: [PATCH] Avoid null artifacts when generating module IDs MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Efe Gökdemir --- .../maven/plugins/ear/AbstractEarModule.java | 14 ++++++----- .../maven/plugins/ear/EarModuleTest.java | 24 +++++++++++++++++++ 2 files changed, 32 insertions(+), 6 deletions(-) diff --git a/src/main/java/org/apache/maven/plugins/ear/AbstractEarModule.java b/src/main/java/org/apache/maven/plugins/ear/AbstractEarModule.java index 4a5ca829..4afcae71 100644 --- a/src/main/java/org/apache/maven/plugins/ear/AbstractEarModule.java +++ b/src/main/java/org/apache/maven/plugins/ear/AbstractEarModule.java @@ -334,13 +334,15 @@ protected void startModuleElement(XMLWriter writer, Boolean generateId) { // FIXME: Should we use the mapping using outputFileNameMapping instead // of doing this on our own? Artifact theArtifact = getArtifact(); - String generatedId = theArtifact.getType().toUpperCase() + "_" + theArtifact.getGroupId() + "." - + theArtifact.getArtifactId(); - if (null != theArtifact.getClassifier() - && !theArtifact.getClassifier().trim().isEmpty()) { - generatedId += "-" + theArtifact.getClassifier().trim(); + if (theArtifact != null) { + String generatedId = theArtifact.getType().toUpperCase() + "_" + theArtifact.getGroupId() + "." + + theArtifact.getArtifactId(); + if (null != theArtifact.getClassifier() + && !theArtifact.getClassifier().trim().isEmpty()) { + generatedId += "-" + theArtifact.getClassifier().trim(); + } + writer.addAttribute("id", generatedId); } - writer.addAttribute("id", generatedId); } } diff --git a/src/test/java/org/apache/maven/plugins/ear/EarModuleTest.java b/src/test/java/org/apache/maven/plugins/ear/EarModuleTest.java index cb8b142b..6b344e3a 100644 --- a/src/test/java/org/apache/maven/plugins/ear/EarModuleTest.java +++ b/src/test/java/org/apache/maven/plugins/ear/EarModuleTest.java @@ -18,9 +18,15 @@ */ package org.apache.maven.plugins.ear; +import java.io.StringWriter; + +import org.codehaus.plexus.util.xml.PrettyPrintXMLWriter; +import org.codehaus.plexus.util.xml.XMLWriter; import org.junit.jupiter.api.Test; +import static org.junit.jupiter.api.Assertions.assertDoesNotThrow; import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertFalse; import static org.junit.jupiter.api.Assertions.assertNull; /** @@ -40,4 +46,22 @@ void testCleanArchivePath() { assertEquals("", AbstractEarModule.cleanArchivePath("")); assertNull(AbstractEarModule.cleanArchivePath(null)); } + + @Test + void testStartModuleElementWithoutResolvedArtifact() { + StringWriter output = new StringWriter(); + XMLWriter writer = new PrettyPrintXMLWriter(output); + TestableWebModule module = new TestableWebModule(); + + assertDoesNotThrow(() -> module.start(writer)); + writer.endElement(); + + assertFalse(output.toString().contains("id=")); + } + + private static final class TestableWebModule extends WebModule { + void start(XMLWriter writer) { + startModuleElement(writer, true); + } + } }