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/06/07 11:38:45 UTC
[maven-archetype] branch master updated (fc9a5ff -> 6ee1659)
This is an automated email from the ASF dual-hosted git repository.
tibordigana pushed a change to branch master
in repository https://gitbox.apache.org/repos/asf/maven-archetype.git.
from fc9a5ff ARCHETYPE-567: switch to dom4j 2.1.1 (and Java 8) dom4j 2.1.1 requires Java 8 dom4j 2.0.2 would retain Java 7 but is vulnerable to CVE-2018-1000632 dom4j 2.0.3 fixes CVE-2018-1000632 but has been pending for ~1 year
new bf79618 [ARCHETYPE-568] Removed dom4j library
new 6ee1659 scope=test should not be in dependencyManagement - only in children POM/dependencies
The 2 revisions listed above as "new" are entirely new to this
repository and will be described in separate emails. The revisions
listed as "add" were already present in the repository and have only
been added to this reference.
Summary of changes:
Jenkinsfile | 2 +-
archetype-common/pom.xml | 13 +-
.../maven/archetype/common/DefaultPomManager.java | 110 +++------------
.../apache/maven/archetype/common/PomManager.java | 8 +-
.../maven/archetype/common/util/PomUtils.java | 152 +++++++++++++++++++++
.../generator/DefaultArchetypeGenerator.java | 38 +-----
.../DefaultFilesetArchetypeGenerator.java | 51 +++----
.../generator/FilesetArchetypeGenerator.java | 5 +-
.../maven/archetype/old/DefaultOldArchetype.java | 90 ++----------
.../apache/maven/archetype/old/OldArchetype.java | 7 +-
.../apache/maven/archetype/old/ArchetypeTest.java | 84 ++++++------
pom.xml | 28 +---
12 files changed, 282 insertions(+), 306 deletions(-)
create mode 100644 archetype-common/src/main/java/org/apache/maven/archetype/common/util/PomUtils.java
[maven-archetype] 01/02: [ARCHETYPE-568] Removed dom4j library
Posted by ti...@apache.org.
This is an automated email from the ASF dual-hosted git repository.
tibordigana pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/maven-archetype.git
commit bf7961805ea56cdad7e138f47098aacccb314db8
Author: tibordigana <ti...@apache.org>
AuthorDate: Thu Jun 6 00:23:22 2019 +0200
[ARCHETYPE-568] Removed dom4j library
---
Jenkinsfile | 2 +-
archetype-common/pom.xml | 13 +-
.../maven/archetype/common/DefaultPomManager.java | 110 +++------------
.../apache/maven/archetype/common/PomManager.java | 8 +-
.../maven/archetype/common/util/PomUtils.java | 152 +++++++++++++++++++++
.../generator/DefaultArchetypeGenerator.java | 38 +-----
.../DefaultFilesetArchetypeGenerator.java | 51 +++----
.../generator/FilesetArchetypeGenerator.java | 5 +-
.../maven/archetype/old/DefaultOldArchetype.java | 90 ++----------
.../apache/maven/archetype/old/OldArchetype.java | 7 +-
.../apache/maven/archetype/old/ArchetypeTest.java | 84 ++++++------
pom.xml | 14 +-
12 files changed, 282 insertions(+), 292 deletions(-)
diff --git a/Jenkinsfile b/Jenkinsfile
index fbaa780..e4757d9 100644
--- a/Jenkinsfile
+++ b/Jenkinsfile
@@ -17,4 +17,4 @@
* under the License.
*/
-asfMavenTlpPlgnBuild(tmpWs: true, jdk:['8','11','12','13'])
+asfMavenTlpPlgnBuild(tmpWs: true, jdk:['7', '8','11','12','13'])
diff --git a/archetype-common/pom.xml b/archetype-common/pom.xml
index f20dacf..27a8730 100644
--- a/archetype-common/pom.xml
+++ b/archetype-common/pom.xml
@@ -78,10 +78,6 @@
<version>1.5.5</version>
</dependency>
<dependency>
- <groupId>org.dom4j</groupId>
- <artifactId>dom4j</artifactId>
- </dependency>
- <dependency>
<groupId>jdom</groupId>
<artifactId>jdom</artifactId>
</dependency>
@@ -133,13 +129,11 @@
<groupId>org.apache.maven.wagon</groupId>
<artifactId>wagon-provider-api</artifactId>
</dependency>
-
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<scope>test</scope>
</dependency>
-
<dependency>
<groupId>org.apache.maven</groupId>
<artifactId>maven-compat</artifactId>
@@ -165,7 +159,11 @@
<artifactId>wagon-http</artifactId>
<scope>test</scope>
</dependency>
-
+ <dependency>
+ <groupId>org.xmlunit</groupId>
+ <artifactId>xmlunit-matchers</artifactId>
+ <scope>test</scope>
+ </dependency>
</dependencies>
<build>
@@ -408,6 +406,7 @@
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<configuration>
+ <trimStackTrace>false</trimStackTrace>
<systemPropertyVariables>
<maven.home>${maven.home}</maven.home>
<java.io.tmpdir>${project.build.outputDirectory}</java.io.tmpdir>
diff --git a/archetype-common/src/main/java/org/apache/maven/archetype/common/DefaultPomManager.java b/archetype-common/src/main/java/org/apache/maven/archetype/common/DefaultPomManager.java
index 1de3629..ca30cd7 100644
--- a/archetype-common/src/main/java/org/apache/maven/archetype/common/DefaultPomManager.java
+++ b/archetype-common/src/main/java/org/apache/maven/archetype/common/DefaultPomManager.java
@@ -20,36 +20,35 @@ package org.apache.maven.archetype.common;
*/
import org.apache.maven.archetype.common.util.Format;
+import org.apache.maven.archetype.common.util.PomUtils;
import org.apache.maven.archetype.exception.InvalidPackaging;
-import org.apache.maven.model.io.xpp3.MavenXpp3Reader;
-import org.apache.maven.model.io.xpp3.MavenXpp3Writer;
+import org.apache.maven.archetype.old.ArchetypeTemplateProcessingException;
+import org.apache.maven.model.Build;
+import org.apache.maven.model.BuildBase;
+import org.apache.maven.model.Dependency;
import org.apache.maven.model.Model;
+import org.apache.maven.model.ModelBase;
import org.apache.maven.model.Parent;
-import org.apache.maven.model.Dependency;
-import org.apache.maven.model.Build;
+import org.apache.maven.model.Plugin;
import org.apache.maven.model.Profile;
-import org.apache.maven.model.ModelBase;
-import org.apache.maven.model.Reporting;
import org.apache.maven.model.ReportPlugin;
-import org.apache.maven.model.BuildBase;
-import org.apache.maven.model.Plugin;
+import org.apache.maven.model.Reporting;
+import org.apache.maven.model.io.xpp3.MavenXpp3Reader;
+import org.apache.maven.model.io.xpp3.MavenXpp3Writer;
import org.codehaus.plexus.component.annotations.Component;
import org.codehaus.plexus.logging.AbstractLogEnabled;
import org.codehaus.plexus.util.FileUtils;
import org.codehaus.plexus.util.ReaderFactory;
import org.codehaus.plexus.util.StringUtils;
-import org.codehaus.plexus.util.xml.pull.XmlPullParserException;
-import org.codehaus.plexus.util.xml.Xpp3DomUtils;
import org.codehaus.plexus.util.xml.Xpp3Dom;
-import org.dom4j.Document;
-import org.dom4j.DocumentException;
-import org.dom4j.Element;
-import org.dom4j.Node;
-import org.dom4j.io.SAXReader;
-import org.dom4j.io.XMLWriter;
+import org.codehaus.plexus.util.xml.Xpp3DomUtils;
+import org.codehaus.plexus.util.xml.pull.XmlPullParserException;
import org.jdom.JDOMException;
import org.jdom.input.SAXBuilder;
+import org.xml.sax.SAXException;
+import javax.xml.parsers.ParserConfigurationException;
+import javax.xml.transform.TransformerException;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
@@ -62,7 +61,6 @@ import java.io.StringWriter;
import java.io.Writer;
import java.util.ArrayList;
import java.util.HashMap;
-import java.util.Iterator;
import java.util.List;
import java.util.Map;
@@ -72,80 +70,14 @@ public class DefaultPomManager
implements PomManager
{
@Override
- public void addModule( File pom, String artifactId )
- throws IOException, XmlPullParserException, DocumentException, InvalidPackaging
+ public void addModule( File pom, String artifactId ) throws IOException, ParserConfigurationException,
+ TransformerException, SAXException, InvalidPackaging, ArchetypeTemplateProcessingException
{
- boolean found = false;
-
- StringWriter writer = new StringWriter();
-
- try ( Reader fileReader = ReaderFactory.newXmlReader( pom ) )
+ StringWriter out = new StringWriter();
+ boolean found = PomUtils.addNewModule( artifactId, ReaderFactory.newXmlReader( pom ), out );
+ if ( found )
{
- SAXReader reader = new SAXReader();
- Document document = reader.read( fileReader );
- Element project = document.getRootElement();
-
- String packaging = null;
- Element packagingElement = project.element( "packaging" );
- if ( packagingElement != null )
- {
- packaging = packagingElement.getStringValue();
- }
- if ( !"pom".equals( packaging ) )
- {
- throw new InvalidPackaging(
- "Unable to add module to the current project as it is not of packaging type 'pom'"
- );
- }
-
- Element modules = project.element( "modules" );
- if ( modules == null )
- {
- modules = project.addText( " " ).addElement( "modules" );
- modules.setText( "\n " );
- project.addText( "\n" );
- }
- // TODO: change to while loop
- for ( @SuppressWarnings( "unchecked" )
- Iterator<Element> i = modules.elementIterator( "module" ); i.hasNext() && !found; )
- {
- Element module = i.next();
- if ( module.getText().equals( artifactId ) )
- {
- found = true;
- }
- }
- if ( !found )
- {
- Node lastTextNode = null;
- for ( @SuppressWarnings( "unchecked" )
- Iterator<Node> i = modules.nodeIterator(); i.hasNext(); )
- {
- Node node = i.next();
- if ( node.getNodeType() == Node.ELEMENT_NODE )
- {
- lastTextNode = null;
- }
- else if ( node.getNodeType() == Node.TEXT_NODE )
- {
- lastTextNode = node;
- }
- }
-
- if ( lastTextNode != null )
- {
- modules.remove( lastTextNode );
- }
-
- modules.addText( "\n " );
- modules.addElement( "module" ).setText( artifactId );
- modules.addText( "\n " );
-
- XMLWriter xmlWriter = new XMLWriter( writer );
- xmlWriter.write( document );
-
- FileUtils.fileWrite( pom.getAbsolutePath(), writer.toString() );
- } // end if
+ FileUtils.fileWrite( pom.getAbsolutePath(), out.toString() );
}
}
diff --git a/archetype-common/src/main/java/org/apache/maven/archetype/common/PomManager.java b/archetype-common/src/main/java/org/apache/maven/archetype/common/PomManager.java
index 10f184a..efe04f7 100644
--- a/archetype-common/src/main/java/org/apache/maven/archetype/common/PomManager.java
+++ b/archetype-common/src/main/java/org/apache/maven/archetype/common/PomManager.java
@@ -20,10 +20,13 @@ package org.apache.maven.archetype.common;
*/
import org.apache.maven.archetype.exception.InvalidPackaging;
+import org.apache.maven.archetype.old.ArchetypeTemplateProcessingException;
import org.apache.maven.model.Model;
import org.codehaus.plexus.util.xml.pull.XmlPullParserException;
-import org.dom4j.DocumentException;
+import org.xml.sax.SAXException;
+import javax.xml.parsers.ParserConfigurationException;
+import javax.xml.transform.TransformerException;
import java.io.File;
import java.io.IOException;
import java.io.InputStream;
@@ -33,7 +36,8 @@ public interface PomManager
String ROLE = PomManager.class.getName();
void addModule( File basedirPom, String artifactId )
- throws IOException, XmlPullParserException, DocumentException, InvalidPackaging;
+ throws IOException, ParserConfigurationException, TransformerException, SAXException, InvalidPackaging,
+ ArchetypeTemplateProcessingException;
void addParent( File pom, File basedirPom )
throws IOException, XmlPullParserException;
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
new file mode 100644
index 0000000..971adaa
--- /dev/null
+++ b/archetype-common/src/main/java/org/apache/maven/archetype/common/util/PomUtils.java
@@ -0,0 +1,152 @@
+package org.apache.maven.archetype.common.util;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import org.apache.maven.archetype.exception.InvalidPackaging;
+import org.apache.maven.archetype.old.ArchetypeTemplateProcessingException;
+import org.w3c.dom.Document;
+import org.w3c.dom.Element;
+import org.w3c.dom.Node;
+import org.w3c.dom.NodeList;
+import org.xml.sax.InputSource;
+import org.xml.sax.SAXException;
+
+import javax.xml.XMLConstants;
+import javax.xml.parsers.DocumentBuilder;
+import javax.xml.parsers.DocumentBuilderFactory;
+import javax.xml.parsers.ParserConfigurationException;
+import javax.xml.transform.OutputKeys;
+import javax.xml.transform.Transformer;
+import javax.xml.transform.TransformerException;
+import javax.xml.transform.TransformerFactory;
+import javax.xml.transform.dom.DOMSource;
+import javax.xml.transform.stream.StreamResult;
+import java.io.IOException;
+import java.io.Reader;
+import java.io.Writer;
+
+/**
+ * POM helper class.
+ */
+public final class PomUtils
+{
+ private PomUtils()
+ {
+ throw new IllegalStateException( "no instantiable constructor" );
+ }
+
+ /**
+ * Adds module {@code artifactId} unless the module already presents in {@code fileReader}.
+ *
+ * @param artifactId artifactId of module to add
+ * @param fileReader source POM XML
+ * @param fileWriter target XML
+ * @return {@code true} if modules section in POM is empty or does not exist or {@code artifactId} does not appear
+ * a module in {@code fileReader} XML.
+ * @throws IOException if I/O error
+ * @throws InvalidPackaging if packaging is not "pom" or not exist in POM
+ * @throws ArchetypeTemplateProcessingException if "project" does not exist or "modules" element is duplicated
+ * @throws ParserConfigurationException if parser error
+ * @throws SAXException if parser error
+ * @throws TransformerException if an error writing to {@code fileWriter}
+ */
+ public static boolean addNewModule( String artifactId, Reader fileReader, Writer fileWriter )
+ throws ArchetypeTemplateProcessingException, InvalidPackaging, IOException,
+ ParserConfigurationException, SAXException, TransformerException
+ {
+ DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
+ dbf.setFeature( "http://apache.org/xml/features/disallow-doctype-decl", true );
+ dbf.setFeature( "http://xml.org/sax/features/external-general-entities", false );
+ dbf.setFeature( "http://xml.org/sax/features/external-parameter-entities", false );
+ dbf.setFeature( "http://apache.org/xml/features/nonvalidating/load-external-dtd", false );
+ dbf.setXIncludeAware( false );
+ dbf.setExpandEntityReferences( false );
+
+ DocumentBuilder db = dbf.newDocumentBuilder();
+ InputSource inputSource = new InputSource();
+ inputSource.setCharacterStream( fileReader );
+ Document document = db.parse( inputSource );
+
+ Element project = document.getDocumentElement();
+ if ( !"project".equals( project.getNodeName() ) )
+ {
+ throw new ArchetypeTemplateProcessingException( "Unable to find root element 'project'." );
+ }
+
+ String packaging = null;
+ NodeList packagingElement = project.getElementsByTagName( "packaging" );
+ if ( packagingElement != null && packagingElement.getLength() == 1 )
+ {
+ packaging = packagingElement.item( 0 ).getTextContent();
+ }
+ if ( !"pom".equals( packaging ) )
+ {
+ throw new InvalidPackaging(
+ "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 )
+ {
+ Element module = document.createElement( "module" );
+ module.setTextContent( artifactId );
+ modules.appendChild( module );
+
+ TransformerFactory tf = TransformerFactory.newInstance();
+ tf.setAttribute( XMLConstants.ACCESS_EXTERNAL_DTD, "" );
+ tf.setAttribute( XMLConstants.ACCESS_EXTERNAL_STYLESHEET, "" );
+
+ tf.setAttribute( "indent-number", 2 );
+ Transformer tr = tf.newTransformer();
+ tr.setOutputProperty( OutputKeys.INDENT, "yes" );
+ tr.setOutputProperty( OutputKeys.METHOD, "xml" );
+ 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 !found;
+ }
+}
diff --git a/archetype-common/src/main/java/org/apache/maven/archetype/generator/DefaultArchetypeGenerator.java b/archetype-common/src/main/java/org/apache/maven/archetype/generator/DefaultArchetypeGenerator.java
index c00cbd7..061dfc6 100644
--- a/archetype-common/src/main/java/org/apache/maven/archetype/generator/DefaultArchetypeGenerator.java
+++ b/archetype-common/src/main/java/org/apache/maven/archetype/generator/DefaultArchetypeGenerator.java
@@ -19,6 +19,7 @@ package org.apache.maven.archetype.generator;
* under the License.
*/
+import org.apache.maven.archetype.exception.InvalidPackaging;
import org.apache.maven.archetype.old.OldArchetype;
import org.apache.maven.archetype.ArchetypeGenerationRequest;
import org.apache.maven.archetype.ArchetypeGenerationResult;
@@ -35,11 +36,8 @@ import org.codehaus.plexus.component.annotations.Component;
import org.codehaus.plexus.component.annotations.Requirement;
import org.codehaus.plexus.logging.AbstractLogEnabled;
import org.codehaus.plexus.util.StringUtils;
-import org.codehaus.plexus.util.xml.pull.XmlPullParserException;
-import org.dom4j.DocumentException;
import java.io.File;
-import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
@@ -64,7 +62,7 @@ public class DefaultArchetypeGenerator
private OldArchetype oldArchetype;
private File getArchetypeFile( ArchetypeGenerationRequest request, ArtifactRepository localRepository )
- throws IOException, ArchetypeException, XmlPullParserException, DocumentException
+ throws ArchetypeException
{
if ( !isArchetypeDefined( request ) )
{
@@ -99,7 +97,7 @@ public class DefaultArchetypeGenerator
}
private void generateArchetype( ArchetypeGenerationRequest request, File archetypeFile )
- throws IOException, ArchetypeException, XmlPullParserException, DocumentException
+ throws ArchetypeException
{
if ( archetypeArtifactManager.isFileSetArchetype( archetypeFile ) )
{
@@ -136,7 +134,7 @@ public class DefaultArchetypeGenerator
}
private void processOldArchetype( ArchetypeGenerationRequest request, File archetypeFile )
- throws UnknownArchetype, ArchetypeGenerationFailure
+ throws ArchetypeGenerationFailure, InvalidPackaging
{
oldArchetype.createArchetype( request, archetypeFile );
}
@@ -149,21 +147,9 @@ public class DefaultArchetypeGenerator
{
generateArchetype( request, archetypeFile );
}
- catch ( IOException ex )
- {
- result.setCause( ex );
- }
- catch ( ArchetypeException ex )
- {
- result.setCause( ex );
- }
- catch ( XmlPullParserException ex )
- {
- result.setCause( ex );
- }
- catch ( DocumentException ex )
+ catch ( ArchetypeException e )
{
- result.setCause( ex );
+ result.setCause( e );
}
}
@@ -176,22 +162,10 @@ public class DefaultArchetypeGenerator
generateArchetype( request, archetypeFile, result );
}
- catch ( IOException ex )
- {
- result.setCause( ex );
- }
catch ( ArchetypeException ex )
{
result.setCause( ex );
}
- catch ( XmlPullParserException ex )
- {
- result.setCause( ex );
- }
- catch ( DocumentException ex )
- {
- result.setCause( ex );
- }
}
private ArtifactRepository createRepository( String url, String repositoryId )
diff --git a/archetype-common/src/main/java/org/apache/maven/archetype/generator/DefaultFilesetArchetypeGenerator.java b/archetype-common/src/main/java/org/apache/maven/archetype/generator/DefaultFilesetArchetypeGenerator.java
index 0f08bad..b4d22c0 100644
--- a/archetype-common/src/main/java/org/apache/maven/archetype/generator/DefaultFilesetArchetypeGenerator.java
+++ b/archetype-common/src/main/java/org/apache/maven/archetype/generator/DefaultFilesetArchetypeGenerator.java
@@ -49,8 +49,10 @@ import org.codehaus.plexus.util.IOUtil;
import org.codehaus.plexus.util.StringUtils;
import org.codehaus.plexus.util.xml.pull.XmlPullParserException;
import org.codehaus.plexus.velocity.VelocityComponent;
-import org.dom4j.DocumentException;
+import org.xml.sax.SAXException;
+import javax.xml.parsers.ParserConfigurationException;
+import javax.xml.transform.TransformerException;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
@@ -95,8 +97,8 @@ public class DefaultFilesetArchetypeGenerator
@Override
public void generateArchetype( ArchetypeGenerationRequest request, File archetypeFile )
- throws UnknownArchetype, ArchetypeNotConfigured, ProjectDirectoryExists, PomFileExists, OutputFileExists,
- ArchetypeGenerationFailure
+ throws UnknownArchetype, ArchetypeNotConfigured, ProjectDirectoryExists, PomFileExists, OutputFileExists,
+ ArchetypeGenerationFailure, InvalidPackaging
{
ClassLoader old = Thread.currentThread().getContextClassLoader();
@@ -240,29 +242,10 @@ public class DefaultFilesetArchetypeGenerator
getLogger().info( "Project created from Archetype in dir: " + outputDirectoryFile.getAbsolutePath() );
}
}
- catch ( FileNotFoundException ex )
+ catch ( IOException | XmlPullParserException | ParserConfigurationException | TransformerException
+ | SAXException e )
{
- throw new ArchetypeGenerationFailure( ex );
- }
- catch ( IOException ex )
- {
- throw new ArchetypeGenerationFailure( ex );
- }
- catch ( XmlPullParserException ex )
- {
- throw new ArchetypeGenerationFailure( ex );
- }
- catch ( DocumentException ex )
- {
- throw new ArchetypeGenerationFailure( ex );
- }
- catch ( ArchetypeGenerationFailure ex )
- {
- throw new ArchetypeGenerationFailure( ex );
- }
- catch ( InvalidPackaging ex )
- {
- throw new ArchetypeGenerationFailure( ex );
+ throw new ArchetypeGenerationFailure( e );
}
finally
{
@@ -277,7 +260,7 @@ public class DefaultFilesetArchetypeGenerator
private boolean copyFile( final File outFile, final String template, final boolean failIfExists,
final ZipFile archetypeZipFile )
- throws FileNotFoundException, OutputFileExists, IOException
+ throws OutputFileExists, IOException
{
getLogger().debug( "Copying file " + template );
@@ -536,9 +519,9 @@ public class DefaultFilesetArchetypeGenerator
final List<String> archetypeResources, File pom, final ZipFile archetypeZipFile,
String moduleOffset, File basedirPom, File outputDirectoryFile,
final String packageName, final AbstractArchetypeDescriptor archetypeDescriptor,
- final Context context )
- throws DocumentException, XmlPullParserException, ArchetypeGenerationFailure, InvalidPackaging, IOException,
- OutputFileExists
+ final Context context ) throws XmlPullParserException, IOException,
+ ParserConfigurationException, SAXException, TransformerException,
+ OutputFileExists, ArchetypeGenerationFailure, InvalidPackaging
{
outputDirectoryFile.mkdirs();
getLogger().debug( "Processing module " + artifactId );
@@ -596,8 +579,8 @@ public class DefaultFilesetArchetypeGenerator
final ZipFile archetypeZipFile, String moduleOffset, final Context context,
final String packageName, final File outputDirectoryFile,
final File basedirPom )
- throws DocumentException, XmlPullParserException, ArchetypeGenerationFailure, InvalidPackaging, IOException,
- FileNotFoundException, OutputFileExists
+ throws XmlPullParserException, IOException, ParserConfigurationException, SAXException,
+ TransformerException, OutputFileExists, ArchetypeGenerationFailure, InvalidPackaging
{
getLogger().debug( "Processing fileset project moduleId " + moduleId );
getLogger().debug( "Processing fileset project pom " + pom );
@@ -655,8 +638,8 @@ public class DefaultFilesetArchetypeGenerator
private void processPomWithParent( Context context, File pom, String moduleOffset, File basedirPom,
String moduleId )
- throws OutputFileExists, XmlPullParserException, DocumentException, IOException, InvalidPackaging,
- ArchetypeGenerationFailure
+ throws XmlPullParserException, IOException, ParserConfigurationException, SAXException,
+ TransformerException, OutputFileExists, ArchetypeGenerationFailure, InvalidPackaging
{
getLogger().debug( "Processing pom " + pom + " with parent " + basedirPom );
@@ -736,7 +719,7 @@ public class DefaultFilesetArchetypeGenerator
private void processTemplates( String packageName, File outputDirectoryFile, Context context,
AbstractArchetypeDescriptor archetypeDescriptor, List<String> archetypeResources,
ZipFile archetypeZipFile, String moduleOffset, boolean failIfExists )
- throws OutputFileExists, ArchetypeGenerationFailure, FileNotFoundException, IOException
+ throws OutputFileExists, ArchetypeGenerationFailure, IOException
{
Iterator<FileSet> iterator = archetypeDescriptor.getFileSets().iterator();
if ( iterator.hasNext() )
diff --git a/archetype-common/src/main/java/org/apache/maven/archetype/generator/FilesetArchetypeGenerator.java b/archetype-common/src/main/java/org/apache/maven/archetype/generator/FilesetArchetypeGenerator.java
index 97b479d..709fca6 100644
--- a/archetype-common/src/main/java/org/apache/maven/archetype/generator/FilesetArchetypeGenerator.java
+++ b/archetype-common/src/main/java/org/apache/maven/archetype/generator/FilesetArchetypeGenerator.java
@@ -21,6 +21,7 @@ package org.apache.maven.archetype.generator;
import org.apache.maven.archetype.exception.ArchetypeGenerationFailure;
import org.apache.maven.archetype.exception.ArchetypeNotConfigured;
+import org.apache.maven.archetype.exception.InvalidPackaging;
import org.apache.maven.archetype.exception.OutputFileExists;
import org.apache.maven.archetype.exception.PomFileExists;
import org.apache.maven.archetype.exception.ProjectDirectoryExists;
@@ -43,6 +44,6 @@ public interface FilesetArchetypeGenerator
* Generate a project from an archetype file.
*/
void generateArchetype( ArchetypeGenerationRequest request, File archetypeFile )
- throws UnknownArchetype, ArchetypeNotConfigured, ProjectDirectoryExists, PomFileExists, OutputFileExists,
- ArchetypeGenerationFailure;
+ throws UnknownArchetype, ArchetypeNotConfigured, ProjectDirectoryExists, PomFileExists, OutputFileExists,
+ ArchetypeGenerationFailure, InvalidPackaging;
}
diff --git a/archetype-common/src/main/java/org/apache/maven/archetype/old/DefaultOldArchetype.java b/archetype-common/src/main/java/org/apache/maven/archetype/old/DefaultOldArchetype.java
index f39c58d..07f75b8 100644
--- a/archetype-common/src/main/java/org/apache/maven/archetype/old/DefaultOldArchetype.java
+++ b/archetype-common/src/main/java/org/apache/maven/archetype/old/DefaultOldArchetype.java
@@ -21,13 +21,15 @@ package org.apache.maven.archetype.old;
import org.apache.commons.io.input.XmlStreamReader;
import org.apache.maven.archetype.ArchetypeGenerationRequest;
+import org.apache.maven.archetype.common.ArchetypeArtifactManager;
+import org.apache.maven.archetype.common.Constants;
+import org.apache.maven.archetype.common.util.PomUtils;
+import org.apache.maven.archetype.exception.InvalidPackaging;
+import org.apache.maven.archetype.exception.UnknownArchetype;
import org.apache.maven.archetype.old.descriptor.ArchetypeDescriptor;
import org.apache.maven.archetype.old.descriptor.ArchetypeDescriptorBuilder;
import org.apache.maven.archetype.old.descriptor.TemplateDescriptor;
import org.apache.maven.artifact.repository.ArtifactRepository;
-import org.apache.maven.archetype.common.ArchetypeArtifactManager;
-import org.apache.maven.archetype.common.Constants;
-import org.apache.maven.archetype.exception.UnknownArchetype;
import org.apache.maven.model.Build;
import org.apache.maven.model.Model;
import org.apache.maven.model.Parent;
@@ -46,13 +48,10 @@ import org.codehaus.plexus.util.StringUtils;
import org.codehaus.plexus.util.WriterFactory;
import org.codehaus.plexus.util.xml.pull.XmlPullParserException;
import org.codehaus.plexus.velocity.VelocityComponent;
-import org.dom4j.Document;
-import org.dom4j.DocumentException;
-import org.dom4j.Element;
-import org.dom4j.Node;
-import org.dom4j.io.SAXReader;
-import org.dom4j.io.XMLWriter;
+import org.xml.sax.SAXException;
+import javax.xml.parsers.ParserConfigurationException;
+import javax.xml.transform.TransformerException;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
@@ -106,8 +105,8 @@ public class DefaultOldArchetype
@Override
public void createArchetype( ArchetypeGenerationRequest request, ArtifactRepository archetypeRepository )
- throws UnknownArchetype, ArchetypeNotFoundException, ArchetypeDescriptorException,
- ArchetypeTemplateProcessingException
+ throws UnknownArchetype, ArchetypeDescriptorException, ArchetypeTemplateProcessingException,
+ InvalidPackaging
{
// ----------------------------------------------------------------------
// Download the archetype
@@ -125,7 +124,7 @@ public class DefaultOldArchetype
@Override
public void createArchetype( ArchetypeGenerationRequest request, File archetypeFile )
- throws ArchetypeDescriptorException, ArchetypeTemplateProcessingException
+ throws ArchetypeDescriptorException, ArchetypeTemplateProcessingException, InvalidPackaging
{
Map<String, String> parameters = new HashMap<>();
@@ -341,7 +340,7 @@ public class DefaultOldArchetype
{
added = addModuleToParentPom( artifactId, fileReader, w );
}
- catch ( IOException | DocumentException e )
+ catch ( IOException | SAXException | ParserConfigurationException | TransformerException e )
{
throw new ArchetypeTemplateProcessingException( "Unable to rewrite parent POM", e );
}
@@ -388,69 +387,10 @@ public class DefaultOldArchetype
}
static boolean addModuleToParentPom( String artifactId, Reader fileReader, Writer fileWriter )
- throws DocumentException, IOException, ArchetypeTemplateProcessingException
+ throws ArchetypeTemplateProcessingException, InvalidPackaging, IOException, ParserConfigurationException,
+ SAXException, TransformerException
{
- SAXReader reader = new SAXReader();
- Document document = reader.read( fileReader );
- Element project = document.getRootElement();
-
- String packaging = null;
- Element packagingElement = project.element( "packaging" );
- if ( packagingElement != null )
- {
- packaging = packagingElement.getStringValue();
- }
- if ( !"pom".equals( packaging ) )
- {
- throw new ArchetypeTemplateProcessingException(
- "Unable to add module to the current project as it is not of packaging type 'pom'" );
- }
-
- Element modules = project.element( "modules" );
- if ( modules == null )
- {
- modules = project.addText( " " ).addElement( "modules" );
- modules.setText( "\n " );
- project.addText( "\n" );
- }
- boolean found = false;
- for ( Iterator<?> i = modules.elementIterator( "module" ); i.hasNext() && !found; )
- {
- Element module = (Element) i.next();
- if ( module.getText().equals( artifactId ) )
- {
- found = true;
- }
- }
- if ( !found )
- {
- Node lastTextNode = null;
- for ( Iterator<?> i = modules.nodeIterator(); i.hasNext(); )
- {
- Node node = (Node) i.next();
- if ( node.getNodeType() == Node.ELEMENT_NODE )
- {
- lastTextNode = null;
- }
- else if ( node.getNodeType() == Node.TEXT_NODE )
- {
- lastTextNode = node;
- }
- }
-
- if ( lastTextNode != null )
- {
- modules.remove( lastTextNode );
- }
-
- modules.addText( "\n " );
- modules.addElement( "module" ).setText( artifactId );
- modules.addText( "\n " );
-
- XMLWriter writer = new XMLWriter( fileWriter );
- writer.write( document );
- }
- return !found;
+ return PomUtils.addNewModule( artifactId, fileReader, fileWriter );
}
private void processTemplates( File pomFile, String outputDirectory, Context context,
diff --git a/archetype-common/src/main/java/org/apache/maven/archetype/old/OldArchetype.java b/archetype-common/src/main/java/org/apache/maven/archetype/old/OldArchetype.java
index 668409a..c28cd6f 100644
--- a/archetype-common/src/main/java/org/apache/maven/archetype/old/OldArchetype.java
+++ b/archetype-common/src/main/java/org/apache/maven/archetype/old/OldArchetype.java
@@ -19,6 +19,7 @@ package org.apache.maven.archetype.old;
* under the License.
*/
+import org.apache.maven.archetype.exception.InvalidPackaging;
import org.apache.maven.artifact.repository.ArtifactRepository;
import java.io.File;
@@ -49,12 +50,12 @@ public interface OldArchetype
* Download an archetype then create a project from it.
*/
void createArchetype( ArchetypeGenerationRequest request, ArtifactRepository archetypeRepository )
- throws UnknownArchetype, ArchetypeNotFoundException, ArchetypeDescriptorException,
- ArchetypeTemplateProcessingException;
+ throws UnknownArchetype, ArchetypeNotFoundException, ArchetypeDescriptorException,
+ ArchetypeTemplateProcessingException, InvalidPackaging;
/**
* Create a project from an archetype file.
*/
void createArchetype( ArchetypeGenerationRequest request, File archetypeFile )
- throws ArchetypeDescriptorException, ArchetypeTemplateProcessingException;
+ throws ArchetypeDescriptorException, ArchetypeTemplateProcessingException, InvalidPackaging;
}
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 d89c7d8..92f2fd5 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
@@ -29,6 +29,7 @@ import java.util.Map;
*/
import org.apache.maven.archetype.ArchetypeGenerationRequest;
+import org.apache.maven.archetype.exception.InvalidPackaging;
import org.apache.maven.artifact.Artifact;
import org.apache.maven.artifact.factory.ArtifactFactory;
import org.apache.maven.artifact.repository.ArtifactRepository;
@@ -48,9 +49,11 @@ import org.codehaus.plexus.PlexusTestCase;
import org.codehaus.plexus.util.FileUtils;
import org.codehaus.plexus.util.xml.pull.XmlPullParserException;
import org.codehaus.plexus.velocity.VelocityComponent;
-import org.dom4j.DocumentException;
import org.sonatype.aether.impl.internal.SimpleLocalRepositoryManager;
+import static org.hamcrest.MatcherAssert.assertThat;
+import static org.xmlunit.matchers.CompareMatcher.isIdenticalTo;
+
/**
* @author <a href="mailto:jason@maven.org">Jason van Zyl</a>
* @version $Id$
@@ -239,7 +242,7 @@ public class ArchetypeTest
}
public void testAddModuleToParentPOM()
- throws DocumentException, IOException, ArchetypeTemplateProcessingException
+ throws Exception
{
String pom = "<project>\n"
+ " <packaging>pom</packaging>\n"
@@ -248,14 +251,13 @@ public class ArchetypeTest
StringWriter out = new StringWriter();
assertTrue( DefaultOldArchetype.addModuleToParentPom( "myArtifactId1", new StringReader( pom ), out ) );
- assertEquals(
- "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n"
- + "<project>\n"
- + " <packaging>pom</packaging>\n"
- + " <modules>\n"
- + " <module>myArtifactId1</module>\n"
- + " </modules>\n"
- + "</project>", out.toString() );
+ assertThat( out.toString(), isIdenticalTo( "<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"no\"?>\n"
+ + "<project>\n"
+ + " <packaging>pom</packaging>\n"
+ + " <modules>\n"
+ + " <module>myArtifactId1</module>\n"
+ + " </modules>\n"
+ + "</project>" ).normalizeWhitespace() );
pom = "<project>\n"
+ " <modelVersion>4.0.0</modelVersion>\n"
@@ -265,14 +267,14 @@ public class ArchetypeTest
out = new StringWriter();
assertTrue( DefaultOldArchetype.addModuleToParentPom( "myArtifactId2", new StringReader( pom ), out ) );
- assertEquals( "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n"
- + "<project>\n"
- + " <modelVersion>4.0.0</modelVersion>\n"
- + " <packaging>pom</packaging>\n"
- + " <modules>\n"
- + " <module>myArtifactId2</module>\n"
- + " </modules>\n"
- + "</project>", out.toString() );
+ assertThat( out.toString(), isIdenticalTo( "<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"no\"?>\n"
+ + "<project>\n"
+ + " <modelVersion>4.0.0</modelVersion>\n"
+ + " <packaging>pom</packaging>\n"
+ + " <modules>\n"
+ + " <module>myArtifactId2</module>\n"
+ + " </modules>\n"
+ + "</project>" ).normalizeWhitespace() );
pom = "<project><modelVersion>4.0.0</modelVersion>\n"
+ " <packaging>pom</packaging>\n"
@@ -283,13 +285,13 @@ public class ArchetypeTest
out = new StringWriter();
assertTrue( DefaultOldArchetype.addModuleToParentPom( "myArtifactId3", new StringReader( pom ), out ) );
- assertEquals( "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n"
- + "<project><modelVersion>4.0.0</modelVersion>\n"
- + " <packaging>pom</packaging>\n"
- + " <modules>\n"
- + " <module>myArtifactId3</module>\n"
- + " </modules>\n"
- + "</project>", out.toString() );
+ 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>myArtifactId3</module>\n"
+ + " </modules>\n"
+ + "</project>" ).normalizeWhitespace() );
pom = "<project><modelVersion>4.0.0</modelVersion>\n"
+ " <packaging>pom</packaging>\n"
@@ -301,14 +303,14 @@ public class ArchetypeTest
out = new StringWriter();
assertTrue( DefaultOldArchetype.addModuleToParentPom( "myArtifactId4", new StringReader( pom ), out ) );
- assertEquals( "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n"
- + "<project><modelVersion>4.0.0</modelVersion>\n"
- + " <packaging>pom</packaging>\n"
- + " <modules>\n"
- + " <module>myArtifactId3</module>\n"
- + " <module>myArtifactId4</module>\n"
- + " </modules>\n"
- + "</project>", out.toString() );
+ 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>myArtifactId3</module>\n"
+ + " <module>myArtifactId4</module>\n"
+ + " </modules>\n"
+ + "</project>" ).normalizeWhitespace() );
pom = "<project><modelVersion>4.0.0</modelVersion>\n"
+ " <packaging>pom</packaging>\n"
@@ -321,11 +323,11 @@ public class ArchetypeTest
assertFalse( DefaultOldArchetype.addModuleToParentPom( "myArtifactId3", new StringReader( pom ), out ) );
// empty means unchanged
- assertEquals( "", out.toString() );
+ assertEquals( "", out.toString().trim() );
}
public void testAddModuleToParentPOMNoPackaging()
- throws DocumentException, IOException
+ throws Exception
{
try
{
@@ -333,15 +335,16 @@ public class ArchetypeTest
DefaultOldArchetype.addModuleToParentPom( "myArtifactId1", new StringReader( pom ), new StringWriter() );
fail( "Should fail to add a module to a JAR packaged project" );
}
- catch ( ArchetypeTemplateProcessingException e )
+ catch ( InvalidPackaging e )
{
// great!
- assertTrue( true );
+ assertEquals( "Unable to add module to the current project as it is not of packaging type 'pom'",
+ e.getLocalizedMessage() );
}
}
public void testAddModuleToParentPOMJarPackaging()
- throws DocumentException, IOException
+ throws Exception
{
try
{
@@ -349,10 +352,11 @@ public class ArchetypeTest
DefaultOldArchetype.addModuleToParentPom( "myArtifactId1", new StringReader( pom ), new StringWriter() );
fail( "Should fail to add a module to a JAR packaged project" );
}
- catch ( ArchetypeTemplateProcessingException e )
+ catch ( InvalidPackaging e )
{
// great!
- assertTrue( true );
+ assertEquals( "Unable to add module to the current project as it is not of packaging type 'pom'",
+ e.getLocalizedMessage() );
}
}
diff --git a/pom.xml b/pom.xml
index bf1bb1f..c854e89 100644
--- a/pom.xml
+++ b/pom.xml
@@ -74,7 +74,7 @@
<properties>
<maven.archetype.scm.devConnection>scm:git:https://gitbox.apache.org/repos/asf/maven-archetype.git</maven.archetype.scm.devConnection>
<mavenVersion>3.0</mavenVersion>
- <javaVersion>8</javaVersion>
+ <javaVersion>7</javaVersion>
<netbeans.hint.useExternalMaven>true</netbeans.hint.useExternalMaven>
<wagonVersion>2.8</wagonVersion>
<surefire.version>2.21.0</surefire.version>
@@ -193,11 +193,6 @@
</exclusions>
</dependency>
<dependency>
- <groupId>org.dom4j</groupId>
- <artifactId>dom4j</artifactId>
- <version>2.1.1</version>
- </dependency>
- <dependency>
<groupId>jdom</groupId>
<artifactId>jdom</artifactId>
<version>1.0</version>
@@ -257,7 +252,12 @@
<artifactId>aether-connector-wagon</artifactId>
<version>1.7</version>
</dependency>
-
+
+ <dependency>
+ <groupId>org.xmlunit</groupId>
+ <artifactId>xmlunit-matchers</artifactId>
+ <version>2.6.0</version>
+ </dependency>
</dependencies>
</dependencyManagement>
[maven-archetype] 02/02: scope=test should not be in
dependencyManagement - only in children POM/dependencies
Posted by ti...@apache.org.
This is an automated email from the ASF dual-hosted git repository.
tibordigana pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/maven-archetype.git
commit 6ee16590590c722b6e7112edb470cf275106f53f
Author: tibordigana <ti...@apache.org>
AuthorDate: Fri Jun 7 00:38:23 2019 +0200
scope=test should not be in dependencyManagement - only in children POM/dependencies
---
pom.xml | 14 --------------
1 file changed, 14 deletions(-)
diff --git a/pom.xml b/pom.xml
index c854e89..911f92a 100644
--- a/pom.xml
+++ b/pom.xml
@@ -87,9 +87,7 @@
<groupId>org.apache.maven</groupId>
<artifactId>maven-compat</artifactId>
<version>${mavenVersion}</version>
- <scope>test</scope>
</dependency>
-
<dependency>
<groupId>org.apache.maven.archetype</groupId>
<artifactId>archetype-catalog</artifactId>
@@ -110,7 +108,6 @@
<artifactId>archetype-packaging</artifactId>
<version>${project.version}</version>
</dependency>
-
<dependency>
<groupId>org.apache.maven</groupId>
<artifactId>maven-artifact</artifactId>
@@ -141,7 +138,6 @@
<artifactId>maven-settings-builder</artifactId>
<version>${mavenVersion}</version>
</dependency>
-
<dependency>
<groupId>org.apache.maven.shared</groupId>
<artifactId>maven-invoker</artifactId>
@@ -216,13 +212,11 @@
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.11</version>
- <scope>test</scope>
</dependency>
<dependency>
<groupId>org.apache.maven.plugin-testing</groupId>
<artifactId>maven-plugin-testing-harness</artifactId>
<version>2.1</version>
- <scope>test</scope>
</dependency>
<dependency>
<groupId>org.apache.maven.wagon</groupId>
@@ -231,17 +225,9 @@
</dependency>
<dependency>
<groupId>org.apache.maven.wagon</groupId>
- <artifactId>wagon-file</artifactId>
- <version>${wagonVersion}</version>
- <scope>test</scope>
- </dependency>
- <dependency>
- <groupId>org.apache.maven.wagon</groupId>
<artifactId>wagon-http</artifactId>
<version>${wagonVersion}</version>
- <scope>test</scope>
</dependency>
-
<dependency>
<groupId>org.sonatype.aether</groupId>
<artifactId>aether-connector-file</artifactId>