You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@maven.apache.org by ti...@apache.org on 2019/07/26 14:46:49 UTC
[maven-archetype] 01/01: [ARCHETYPE-571] Unable to generate project
which has pom with multiple profiles with modules section
This is an automated email from the ASF dual-hosted git repository.
tibordigana pushed a commit to branch ARCHETYPE-571
in repository https://gitbox.apache.org/repos/asf/maven-archetype.git
commit 443064d6426f5cb1a1cd1dbe30bc41e0147ba289
Author: tibordigana <ti...@apache.org>
AuthorDate: Fri Jul 26 16:46:22 2019 +0200
[ARCHETYPE-571] Unable to generate project which has pom with multiple profiles with modules section
---
.../maven/archetype/common/util/PomUtils.java | 75 +++++++++++++---------
.../apache/maven/archetype/old/ArchetypeTest.java | 52 +++++++++++++++
2 files changed, 98 insertions(+), 29 deletions(-)
diff --git a/archetype-common/src/main/java/org/apache/maven/archetype/common/util/PomUtils.java b/archetype-common/src/main/java/org/apache/maven/archetype/common/util/PomUtils.java
index 971adaa..a27f125 100644
--- a/archetype-common/src/main/java/org/apache/maven/archetype/common/util/PomUtils.java
+++ b/archetype-common/src/main/java/org/apache/maven/archetype/common/util/PomUtils.java
@@ -102,37 +102,17 @@ public final class PomUtils
"Unable to add module to the current project as it is not of packaging type 'pom'" );
}
- NodeList modulesList = project.getElementsByTagName( "modules" );
- final Element modules;
- if ( modulesList.getLength() == 0 )
- {
- modules = document.createElement( "modules" );
- project.appendChild( modules );
- }
- else if ( modulesList.getLength() == 1 )
- {
- modules = (Element) modulesList.item( 0 );
- }
- else
- {
- throw new ArchetypeTemplateProcessingException( "Illegal to use multiple <modules/> sections." );
- }
- boolean found = false;
- NodeList moduleList = modules.getElementsByTagName( "module" );
- for ( int len = moduleList.getLength(), i = 0; i < len; i++ )
- {
- Node module = moduleList.item( i );
- String moduleValue = module.getTextContent();
- if ( moduleValue != null && moduleValue.equals( artifactId ) )
- {
- found = true;
- break;
- }
- }
- if ( !found )
+ Node modules = getModulesNode( project );
+
+ if ( !hasArtifactIdInModules( artifactId, modules ) )
{
Element module = document.createElement( "module" );
module.setTextContent( artifactId );
+ if ( modules == null )
+ {
+ modules = document.createElement( "modules" );
+ project.appendChild( modules );
+ }
modules.appendChild( module );
TransformerFactory tf = TransformerFactory.newInstance();
@@ -146,7 +126,44 @@ public final class PomUtils
tr.setOutputProperty( OutputKeys.ENCODING, "UTF-8" );
tr.setOutputProperty( "{http://xml.apache.org/xslt}indent-amount", "2" );
tr.transform( new DOMSource( document ), new StreamResult( fileWriter ) );
+ return true;
+ }
+ else
+ {
+ return false;
+ }
+ }
+
+ private static Node getModulesNode( Element project )
+ {
+ Node modules = null;
+ NodeList nodes = project.getChildNodes();
+ for ( int len = nodes.getLength(), i = 0; i < len; i++ )
+ {
+ Node node = nodes.item( i );
+ if ( node.getNodeType() == Node.ELEMENT_NODE && "modules".equals( node.getNodeName() ) )
+ {
+ modules = node;
+ break;
+ }
+ }
+ return modules;
+ }
+
+ private static boolean hasArtifactIdInModules( String artifactId, Node modules )
+ {
+ if ( modules != null )
+ {
+ Node module = modules.getFirstChild();
+ while ( module != null )
+ {
+ if ( module.getNodeType() == Node.ELEMENT_NODE && artifactId.equals( module.getTextContent() ) )
+ {
+ return true;
+ }
+ module = module.getNextSibling();
+ }
}
- return !found;
+ return false;
}
}
diff --git a/archetype-common/src/test/java/org/apache/maven/archetype/old/ArchetypeTest.java b/archetype-common/src/test/java/org/apache/maven/archetype/old/ArchetypeTest.java
index 92f2fd5..e4490d1 100644
--- a/archetype-common/src/test/java/org/apache/maven/archetype/old/ArchetypeTest.java
+++ b/archetype-common/src/test/java/org/apache/maven/archetype/old/ArchetypeTest.java
@@ -324,6 +324,58 @@ public class ArchetypeTest
// empty means unchanged
assertEquals( "", out.toString().trim() );
+
+
+ pom = "<project><modelVersion>4.0.0</modelVersion>\n"
+ + " <packaging>pom</packaging>\n"
+ + " <modules>\n"
+ + " <module>myArtifactId1</module>\n"
+ + " <module>myArtifactId2</module>\n"
+ + " <module>myArtifactId3</module>\n"
+ + " </modules>\n"
+ + " <profiles>\n"
+ + " <profile>\n"
+ + " <id>profile1</id>\n"
+ + " <modules>\n"
+ + " <module>module1</module>\n"
+ + " </modules>\n"
+ + " </profile>\n"
+ + " <profile>\n"
+ + " <id>profile2</id>\n"
+ + " <modules>\n"
+ + " <module>module2</module>\n"
+ + " </modules>\n"
+ + " </profile>\n"
+ + " </profiles>\n"
+ + "</project>";
+
+ out = new StringWriter();
+ assertTrue( DefaultOldArchetype.addModuleToParentPom( "module1", new StringReader( pom ), out ) );
+
+ assertThat( out.toString(), isIdenticalTo("<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"no\"?>\n"
+ + "<project><modelVersion>4.0.0</modelVersion>\n"
+ + " <packaging>pom</packaging>\n"
+ + " <modules>\n"
+ + " <module>myArtifactId1</module>\n"
+ + " <module>myArtifactId2</module>\n"
+ + " <module>myArtifactId3</module>\n"
+ + " <module>module1</module>\n"
+ + " </modules>\n"
+ + " <profiles>\n"
+ + " <profile>\n"
+ + " <id>profile1</id>\n"
+ + " <modules>\n"
+ + " <module>module1</module>\n"
+ + " </modules>\n"
+ + " </profile>\n"
+ + " <profile>\n"
+ + " <id>profile2</id>\n"
+ + " <modules>\n"
+ + " <module>module2</module>\n"
+ + " </modules>\n"
+ + " </profile>\n"
+ + " </profiles>\n"
+ + "</project>" ).normalizeWhitespace() );
}
public void testAddModuleToParentPOMNoPackaging()