You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@maven.apache.org by sj...@apache.org on 2024/09/20 06:12:36 UTC

(maven-archetype) branch master updated: [ARCHETYPE-678] Code cleanups

This is an automated email from the ASF dual-hosted git repository.

sjaranowski pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/maven-archetype.git


The following commit(s) were added to refs/heads/master by this push:
     new 4f652a79 [ARCHETYPE-678] Code cleanups
4f652a79 is described below

commit 4f652a79f64d28ce1814370354894b0eb6e9c8d2
Author: Slawomir Jaranowski <s....@gmail.com>
AuthorDate: Thu Sep 19 20:01:55 2024 +0200

    [ARCHETYPE-678] Code cleanups
---
 .../maven/archetype/DefaultArchetypeManager.java   |  4 +-
 .../archetype/common/ArchetypeArtifactManager.java |  1 -
 .../archetype/common/ArchetypeFilesResolver.java   |  1 -
 .../apache/maven/archetype/common/Constants.java   | 41 +++++++++----------
 .../common/DefaultArchetypeArtifactManager.java    |  7 ++--
 .../common/DefaultArchetypeFilesResolver.java      |  5 +--
 .../maven/archetype/common/DefaultPomManager.java  | 18 ++++-----
 .../maven/archetype/common/util/ListScanner.java   |  6 +--
 .../archetype/common/util/NamespaceStack.java      |  3 +-
 .../maven/archetype/common/util/XMLOutputter.java  | 13 +++---
 .../maven/archetype/creator/ArchetypeCreator.java  |  1 -
 .../archetype/creator/FilesetArchetypeCreator.java | 42 +++++++++----------
 .../exception/ArchetypeSelectionFailure.java       |  9 -----
 .../DefaultFilesetArchetypeGenerator.java          | 17 ++++----
 .../archetype/old/ArchetypeNotFoundException.java  | 39 ------------------
 .../old/ArchetypeTemplateProcessingException.java  |  4 --
 .../maven/archetype/old/DefaultOldArchetype.java   | 37 +++++++++--------
 .../apache/maven/archetype/old/OldArchetype.java   |  4 +-
 .../DefaultRepositoryCrawler.java                  |  4 +-
 .../source/CatalogArchetypeDataSource.java         |  5 +--
 archetype-common/src/main/mdo/archetype.mdo        |  8 ++--
 .../archetype/common/util/TestXMLOutputter.java    |  2 +-
 .../generator/DefaultArchetypeGeneratorTest.java   | 16 ++++----
 .../archetype/old/descriptor/ArchetypeXsdTest.java |  2 +-
 .../src/main/mdo/archetype-catalog.mdo             | 12 +++---
 .../src/main/mdo/archetype-descriptor.mdo          |  8 ++--
 .../java/org/apache/maven/plugins/HelloMojo.java   |  3 +-
 .../maven/archetype/mojos/CrawlRepositoryMojo.java |  5 +--
 .../mojos/CreateArchetypeFromProjectMojo.java      | 17 ++++----
 .../mojos/CreateProjectFromArchetypeMojo.java      | 15 ++-----
 .../maven/archetype/mojos/IntegrationTestMojo.java | 25 ++++++------
 .../org/apache/maven/archetype/mojos/JarMojo.java  |  5 +--
 .../maven/archetype/ui/ArchetypeFactory.java       |  1 -
 .../ui/creation/ArchetypeCreationConfigurator.java |  6 +--
 .../ui/creation/ArchetypeCreationQueryer.java      |  1 -
 .../DefaultArchetypeCreationConfigurator.java      | 47 +++-------------------
 .../creation/DefaultArchetypeCreationQueryer.java  |  4 +-
 .../ui/generation/ArchetypeSelectionQueryer.java   |  3 --
 .../DefaultArchetypeSelectionQueryer.java          | 13 +-----
 .../ui/generation/DefaultArchetypeSelector.java    |  2 +-
 .../DefaultArchetypeGenerationQueryerTest.java     |  4 +-
 .../DefaultArchetypeSelectionQueryerTest.java      |  2 +-
 42 files changed, 161 insertions(+), 301 deletions(-)

diff --git a/archetype-common/src/main/java/org/apache/maven/archetype/DefaultArchetypeManager.java b/archetype-common/src/main/java/org/apache/maven/archetype/DefaultArchetypeManager.java
index 44e429dc..dae46667 100644
--- a/archetype-common/src/main/java/org/apache/maven/archetype/DefaultArchetypeManager.java
+++ b/archetype-common/src/main/java/org/apache/maven/archetype/DefaultArchetypeManager.java
@@ -24,8 +24,8 @@ import javax.inject.Singleton;
 
 import java.io.File;
 import java.io.FileInputStream;
-import java.io.FileOutputStream;
 import java.io.IOException;
+import java.nio.file.Files;
 import java.util.List;
 import java.util.Map;
 import java.util.zip.ZipEntry;
@@ -95,7 +95,7 @@ public class DefaultArchetypeManager extends AbstractLogEnabled implements Arche
             getLogger().warn("Could not create new file \"" + archive.getPath() + "\" or the file already exists.");
         }
 
-        try (ZipOutputStream zos = new ZipOutputStream(new FileOutputStream(archive))) {
+        try (ZipOutputStream zos = new ZipOutputStream(Files.newOutputStream(archive.toPath()))) {
             zos.setLevel(9);
 
             zipper(zos, sourceDirectory.getAbsolutePath().length(), sourceDirectory);
diff --git a/archetype-common/src/main/java/org/apache/maven/archetype/common/ArchetypeArtifactManager.java b/archetype-common/src/main/java/org/apache/maven/archetype/common/ArchetypeArtifactManager.java
index 25669732..96b49c26 100644
--- a/archetype-common/src/main/java/org/apache/maven/archetype/common/ArchetypeArtifactManager.java
+++ b/archetype-common/src/main/java/org/apache/maven/archetype/common/ArchetypeArtifactManager.java
@@ -31,7 +31,6 @@ import org.eclipse.aether.RepositorySystemSession;
 import org.eclipse.aether.repository.RemoteRepository;
 
 public interface ArchetypeArtifactManager {
-    String ROLE = ArchetypeArtifactManager.class.getName();
 
     Model getArchetypePom(File jar) throws XmlPullParserException, UnknownArchetype, IOException;
 
diff --git a/archetype-common/src/main/java/org/apache/maven/archetype/common/ArchetypeFilesResolver.java b/archetype-common/src/main/java/org/apache/maven/archetype/common/ArchetypeFilesResolver.java
index a9ef6b9b..bbbed3f6 100644
--- a/archetype-common/src/main/java/org/apache/maven/archetype/common/ArchetypeFilesResolver.java
+++ b/archetype-common/src/main/java/org/apache/maven/archetype/common/ArchetypeFilesResolver.java
@@ -26,7 +26,6 @@ import org.apache.maven.archetype.metadata.FileSet;
 
 /** @author rafale */
 public interface ArchetypeFilesResolver {
-    String ROLE = ArchetypeFilesResolver.class.getName();
 
     List<String> getFilesWithExtension(List<String> files, String extension);
 
diff --git a/archetype-common/src/main/java/org/apache/maven/archetype/common/Constants.java b/archetype-common/src/main/java/org/apache/maven/archetype/common/Constants.java
index 888e04d0..3b98aea5 100644
--- a/archetype-common/src/main/java/org/apache/maven/archetype/common/Constants.java
+++ b/archetype-common/src/main/java/org/apache/maven/archetype/common/Constants.java
@@ -55,25 +55,24 @@ public interface Constants {
 
     String EXCLUDE_PATTERNS = "excludePatterns";
 
-    List<String> DEFAULT_FILTERED_EXTENSIONS = Arrays.asList(new String[] {
-        "java",
-        "xml",
-        "txt",
-        "groovy",
-        "cs",
-        "mdo",
-        "aj",
-        "jsp",
-        "gsp",
-        "vm",
-        "html",
-        "xhtml",
-        "properties",
-        ".classpath",
-        ".project"
-    });
-
-    List<String> DEFAULT_LANGUAGES = Arrays.asList(new String[] {"java", "groovy", "csharp", "aspectj"});
+    List<String> DEFAULT_FILTERED_EXTENSIONS = Arrays.asList(
+            "java",
+            "xml",
+            "txt",
+            "groovy",
+            "cs",
+            "mdo",
+            "aj",
+            "jsp",
+            "gsp",
+            "vm",
+            "html",
+            "xhtml",
+            "properties",
+            ".classpath",
+            ".project");
+
+    List<String> DEFAULT_LANGUAGES = Arrays.asList("java", "groovy", "csharp", "aspectj");
 
     String GROUP_ID = "groupId";
 
@@ -91,12 +90,8 @@ public interface Constants {
 
     String PARENT_ARTIFACT_ID = "parentArtifactId";
 
-    String POM_PATH = Constants.ARCHETYPE_RESOURCES + "/" + Constants.ARCHETYPE_POM;
-
     String RESOURCES = "resources";
 
-    String SITE = "site";
-
     String SRC = "src";
 
     String TEST = "test";
diff --git a/archetype-common/src/main/java/org/apache/maven/archetype/common/DefaultArchetypeArtifactManager.java b/archetype-common/src/main/java/org/apache/maven/archetype/common/DefaultArchetypeArtifactManager.java
index 3325640f..e06d4f3d 100644
--- a/archetype-common/src/main/java/org/apache/maven/archetype/common/DefaultArchetypeArtifactManager.java
+++ b/archetype-common/src/main/java/org/apache/maven/archetype/common/DefaultArchetypeArtifactManager.java
@@ -25,10 +25,12 @@ import javax.inject.Singleton;
 import java.io.File;
 import java.io.IOException;
 import java.io.InputStream;
+import java.io.InputStreamReader;
 import java.io.Reader;
 import java.net.MalformedURLException;
 import java.net.URL;
 import java.net.URLClassLoader;
+import java.nio.charset.StandardCharsets;
 import java.util.ArrayList;
 import java.util.Enumeration;
 import java.util.List;
@@ -46,7 +48,6 @@ import org.apache.maven.archetype.metadata.io.xpp3.ArchetypeDescriptorXpp3Reader
 import org.apache.maven.archetype.old.descriptor.ArchetypeDescriptorBuilder;
 import org.apache.maven.model.Model;
 import org.codehaus.plexus.logging.AbstractLogEnabled;
-import org.codehaus.plexus.util.ReaderFactory;
 import org.codehaus.plexus.util.xml.pull.XmlPullParserException;
 import org.eclipse.aether.RepositorySystemSession;
 import org.eclipse.aether.repository.RemoteRepository;
@@ -265,7 +266,7 @@ public class DefaultArchetypeArtifactManager extends AbstractLogEnabled implemen
     }
 
     private boolean isFileSetArchetype(ZipFile zipFile) throws IOException {
-        try (Reader reader = getArchetypeDescriptorReader(zipFile); ) {
+        try (Reader reader = getArchetypeDescriptorReader(zipFile)) {
             return (reader != null);
         }
     }
@@ -330,7 +331,7 @@ public class DefaultArchetypeArtifactManager extends AbstractLogEnabled implemen
             throw new IOException("The " + descriptor + " descriptor cannot be read in " + zipFile.getName() + ".");
         }
 
-        return ReaderFactory.newReader(is, ReaderFactory.UTF_8);
+        return new InputStreamReader(is, StandardCharsets.UTF_8);
     }
 
     private ZipEntry searchEntry(ZipFile zipFile, String searchString) {
diff --git a/archetype-common/src/main/java/org/apache/maven/archetype/common/DefaultArchetypeFilesResolver.java b/archetype-common/src/main/java/org/apache/maven/archetype/common/DefaultArchetypeFilesResolver.java
index 1315189d..1130b2cd 100644
--- a/archetype-common/src/main/java/org/apache/maven/archetype/common/DefaultArchetypeFilesResolver.java
+++ b/archetype-common/src/main/java/org/apache/maven/archetype/common/DefaultArchetypeFilesResolver.java
@@ -24,7 +24,6 @@ import javax.inject.Singleton;
 import java.io.File;
 import java.io.IOException;
 import java.util.ArrayList;
-import java.util.Arrays;
 import java.util.HashSet;
 import java.util.List;
 import java.util.Set;
@@ -271,14 +270,14 @@ public class DefaultArchetypeFilesResolver extends AbstractLogEnabled implements
     }
 
     private List<String> resolveFiles(File basedir, List<String> languages) throws IOException {
-        String[] languagesArray = languages.toArray(new String[languages.size()]);
+        String[] languagesArray = languages.toArray(new String[0]);
         String[] languagesPathesArray = new String[languagesArray.length];
         for (int i = 0; i < languagesArray.length; i++) {
             languagesPathesArray[i] = "**/src/**/" + languagesArray[i] + "/**";
         }
 
         String excludes = "target";
-        for (String defaultExclude : Arrays.asList(ListScanner.DEFAULTEXCLUDES)) {
+        for (String defaultExclude : ListScanner.DEFAULTEXCLUDES) {
             excludes += "," + defaultExclude + "/**";
         }
 
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 f6bed59e..4b2a1352 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
@@ -24,7 +24,6 @@ import javax.xml.parsers.ParserConfigurationException;
 import javax.xml.transform.TransformerException;
 
 import java.io.File;
-import java.io.FileInputStream;
 import java.io.FileNotFoundException;
 import java.io.FileOutputStream;
 import java.io.IOException;
@@ -33,6 +32,7 @@ import java.io.OutputStreamWriter;
 import java.io.Reader;
 import java.io.StringWriter;
 import java.io.Writer;
+import java.nio.file.Files;
 import java.util.ArrayList;
 import java.util.HashMap;
 import java.util.List;
@@ -56,8 +56,8 @@ import org.apache.maven.model.io.xpp3.MavenXpp3Reader;
 import org.apache.maven.model.io.xpp3.MavenXpp3Writer;
 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.XmlStreamReader;
 import org.codehaus.plexus.util.xml.Xpp3Dom;
 import org.codehaus.plexus.util.xml.Xpp3DomUtils;
 import org.codehaus.plexus.util.xml.pull.XmlPullParserException;
@@ -73,7 +73,7 @@ public class DefaultPomManager extends AbstractLogEnabled implements PomManager
             throws IOException, ParserConfigurationException, TransformerException, SAXException, InvalidPackaging,
                     ArchetypeTemplateProcessingException {
         StringWriter out = new StringWriter();
-        boolean found = PomUtils.addNewModule(artifactId, ReaderFactory.newXmlReader(pom), out);
+        boolean found = PomUtils.addNewModule(artifactId, new XmlStreamReader(pom), out);
         if (found) {
             FileUtils.fileWrite(pom.getAbsolutePath(), out.toString());
         }
@@ -182,7 +182,7 @@ public class DefaultPomManager extends AbstractLogEnabled implements PomManager
 
     @Override
     public Model readPom(final File pomFile) throws IOException, XmlPullParserException {
-        try (Reader pomReader = ReaderFactory.newXmlReader(pomFile)) {
+        try (Reader pomReader = new XmlStreamReader(pomFile)) {
             MavenXpp3Reader reader = new MavenXpp3Reader();
 
             return reader.read(pomReader);
@@ -191,7 +191,7 @@ public class DefaultPomManager extends AbstractLogEnabled implements PomManager
 
     @Override
     public Model readPom(InputStream pomStream) throws IOException, XmlPullParserException {
-        try (Reader pomReader = ReaderFactory.newXmlReader(pomStream)) {
+        try (Reader pomReader = new XmlStreamReader(pomStream)) {
             MavenXpp3Reader reader = new MavenXpp3Reader();
 
             return reader.read(pomReader);
@@ -203,7 +203,7 @@ public class DefaultPomManager extends AbstractLogEnabled implements PomManager
         String fileEncoding = StringUtils.isEmpty(model.getModelEncoding()) ? "UTF-8" : model.getModelEncoding();
 
         org.jdom2.Document doc;
-        try (InputStream inputStream = new FileInputStream(initialPomFile)) {
+        try (InputStream inputStream = Files.newInputStream(initialPomFile.toPath())) {
             SAXBuilder builder = new SAXBuilder();
             doc = builder.build(inputStream);
         } catch (JDOMException exc) {
@@ -225,7 +225,7 @@ public class DefaultPomManager extends AbstractLogEnabled implements PomManager
         } catch (FileNotFoundException e) {
             getLogger().debug("Creating pom file " + pomFile);
 
-            try (Writer pomWriter = new OutputStreamWriter(new FileOutputStream(pomFile), fileEncoding)) {
+            try (Writer pomWriter = new OutputStreamWriter(Files.newOutputStream(pomFile.toPath()), fileEncoding)) {
                 MavenXpp3Writer writer = new MavenXpp3Writer();
                 writer.write(pomWriter, model);
             }
@@ -253,13 +253,13 @@ public class DefaultPomManager extends AbstractLogEnabled implements PomManager
 
     private void mergeProfiles(Model model, Model generatedModel) {
         List<Profile> generatedProfiles = generatedModel.getProfiles();
-        if (generatedProfiles != null && generatedProfiles.size() > 0) {
+        if (generatedProfiles != null && !generatedProfiles.isEmpty()) {
             List<Profile> modelProfiles = model.getProfiles();
             Map<String, Profile> modelProfileIdMap = new HashMap<>();
             if (modelProfiles == null) {
                 modelProfiles = new ArrayList<>();
                 model.setProfiles(modelProfiles);
-            } else if (modelProfiles.size() > 0) {
+            } else if (!modelProfiles.isEmpty()) {
                 // add profile ids from the model for later lookups to the modelProfileIds set
                 for (Profile modelProfile : modelProfiles) {
                     modelProfileIdMap.put(modelProfile.getId(), modelProfile);
diff --git a/archetype-common/src/main/java/org/apache/maven/archetype/common/util/ListScanner.java b/archetype-common/src/main/java/org/apache/maven/archetype/common/util/ListScanner.java
index b3fb5536..79dc983b 100644
--- a/archetype-common/src/main/java/org/apache/maven/archetype/common/util/ListScanner.java
+++ b/archetype-common/src/main/java/org/apache/maven/archetype/common/util/ListScanner.java
@@ -334,7 +334,7 @@ public class ListScanner {
      *                 elements must be non-<code>null</code>.
      */
     public void setExcludes(List<String> excludesList) {
-        String[] excludes = excludesList.toArray(new String[excludesList.size()]);
+        String[] excludes = excludesList.toArray(new String[0]);
         if (excludes == null) {
             this.excludes = null;
         } else {
@@ -362,7 +362,7 @@ public class ListScanner {
      *                 elements must be non-<code>null</code>.
      */
     public void setIncludes(List<String> includesList) {
-        String[] includes = includesList.toArray(new String[includesList.size()]);
+        String[] includes = includesList.toArray(new String[0]);
         if (includes == null) {
             this.includes = null;
         } else {
@@ -449,7 +449,7 @@ public class ListScanner {
         String path = null;
 
         String baseDir = getBasedir();
-        if (baseDir.length() > 0) {
+        if (!baseDir.isEmpty()) {
             baseDir = baseDir.concat(File.separator);
         }
 
diff --git a/archetype-common/src/main/java/org/apache/maven/archetype/common/util/NamespaceStack.java b/archetype-common/src/main/java/org/apache/maven/archetype/common/util/NamespaceStack.java
index 25b708df..0eea3c59 100644
--- a/archetype-common/src/main/java/org/apache/maven/archetype/common/util/NamespaceStack.java
+++ b/archetype-common/src/main/java/org/apache/maven/archetype/common/util/NamespaceStack.java
@@ -140,8 +140,7 @@ class NamespaceStack {
         if (index == -1) {
             return null;
         }
-        String uri = uris.elementAt(index);
-        return uri;
+        return uris.elementAt(index);
     }
 
     /**
diff --git a/archetype-common/src/main/java/org/apache/maven/archetype/common/util/XMLOutputter.java b/archetype-common/src/main/java/org/apache/maven/archetype/common/util/XMLOutputter.java
index b470ec99..afcf8e0a 100644
--- a/archetype-common/src/main/java/org/apache/maven/archetype/common/util/XMLOutputter.java
+++ b/archetype-common/src/main/java/org/apache/maven/archetype/common/util/XMLOutputter.java
@@ -350,8 +350,7 @@ public class XMLOutputter implements Cloneable {
 
     /** Get an OutputStreamWriter, use specified encoding. */
     private static Writer makeWriter(OutputStream out, String enc) throws java.io.UnsupportedEncodingException {
-        Writer writer = new BufferedWriter((new OutputStreamWriter(new BufferedOutputStream(out), enc)));
-        return writer;
+        return new BufferedWriter((new OutputStreamWriter(new BufferedOutputStream(out), enc)));
     }
 
     // * * * * * * * * * * Output to a Writer * * * * * * * * * *
@@ -1271,12 +1270,12 @@ public class XMLOutputter implements Cloneable {
 
     // Determine if a string starts with a XML whitespace.
     private boolean startsWithWhite(String str) {
-        return ((str != null) && (str.length() > 0) && isWhitespace(str.charAt(0)));
+        return ((str != null) && (!str.isEmpty()) && isWhitespace(str.charAt(0)));
     }
 
     // Determine if a string ends with a XML whitespace.
     private boolean endsWithWhite(String str) {
-        return ((str != null) && (str.length() > 0) && isWhitespace(str.charAt(str.length() - 1)));
+        return ((str != null) && (!str.isEmpty()) && isWhitespace(str.charAt(str.length() - 1)));
     }
 
     // Determine if a character is a XML whitespace.
@@ -1486,7 +1485,7 @@ public class XMLOutputter implements Cloneable {
                 + "omitEncoding = " + userFormat.omitEncoding + ", "
                 + "indent = '" + userFormat.indent + "'" + ", "
                 + "expandEmptyElements = " + userFormat.expandEmptyElements + ", "
-                + "lineSeparator = '" + buffer.toString() + "', "
+                + "lineSeparator = '" + buffer + "', "
                 + "textMode = " + userFormat.mode + "]");
     }
 
@@ -1508,12 +1507,12 @@ public class XMLOutputter implements Cloneable {
      * declare a NamespaceStack parameter, but we don't want to
      * declare the parent NamespaceStack class as public.
      */
-    protected class NamespaceStack extends org.apache.maven.archetype.common.util.NamespaceStack {}
+    protected static class NamespaceStack extends org.apache.maven.archetype.common.util.NamespaceStack {}
 
     // Support method to print a name without using elt.getQualifiedName()
     // and thus avoiding a StringBuilder creation and memory churn
     private void printQualifiedName(Writer out, Element e) throws IOException {
-        if (e.getNamespace().getPrefix().length() == 0) {
+        if (e.getNamespace().getPrefix().isEmpty()) {
             out.write(e.getName());
         } else {
             out.write(e.getNamespace().getPrefix());
diff --git a/archetype-common/src/main/java/org/apache/maven/archetype/creator/ArchetypeCreator.java b/archetype-common/src/main/java/org/apache/maven/archetype/creator/ArchetypeCreator.java
index e1c988a6..63d7785c 100644
--- a/archetype-common/src/main/java/org/apache/maven/archetype/creator/ArchetypeCreator.java
+++ b/archetype-common/src/main/java/org/apache/maven/archetype/creator/ArchetypeCreator.java
@@ -25,7 +25,6 @@ import org.apache.maven.archetype.ArchetypeCreationResult;
  * Create an archetype from a project.
  */
 public interface ArchetypeCreator {
-    String ROLE = ArchetypeCreator.class.getName();
 
     void createArchetype(ArchetypeCreationRequest request, ArchetypeCreationResult result);
 }
diff --git a/archetype-common/src/main/java/org/apache/maven/archetype/creator/FilesetArchetypeCreator.java b/archetype-common/src/main/java/org/apache/maven/archetype/creator/FilesetArchetypeCreator.java
index 021b6cc6..48be58dc 100644
--- a/archetype-common/src/main/java/org/apache/maven/archetype/creator/FilesetArchetypeCreator.java
+++ b/archetype-common/src/main/java/org/apache/maven/archetype/creator/FilesetArchetypeCreator.java
@@ -23,14 +23,12 @@ import javax.inject.Named;
 import javax.inject.Singleton;
 
 import java.io.File;
-import java.io.FileInputStream;
-import java.io.FileNotFoundException;
-import java.io.FileOutputStream;
 import java.io.IOException;
 import java.io.InputStream;
 import java.io.OutputStream;
 import java.io.Reader;
 import java.io.Writer;
+import java.nio.file.Files;
 import java.util.ArrayList;
 import java.util.Arrays;
 import java.util.Collections;
@@ -73,9 +71,9 @@ import org.codehaus.plexus.logging.AbstractLogEnabled;
 import org.codehaus.plexus.util.DirectoryScanner;
 import org.codehaus.plexus.util.FileUtils;
 import org.codehaus.plexus.util.IOUtil;
-import org.codehaus.plexus.util.ReaderFactory;
 import org.codehaus.plexus.util.StringUtils;
-import org.codehaus.plexus.util.WriterFactory;
+import org.codehaus.plexus.util.xml.XmlStreamReader;
+import org.codehaus.plexus.util.xml.XmlStreamWriter;
 import org.codehaus.plexus.util.xml.Xpp3Dom;
 import org.codehaus.plexus.util.xml.pull.XmlPullParserException;
 
@@ -180,7 +178,7 @@ public class FilesetArchetypeCreator extends AbstractLogEnabled implements Arche
             List<String> excludePatterns = configurationProperties.getProperty(Constants.EXCLUDE_PATTERNS) != null
                     ? Arrays.asList(
                             StringUtils.split(configurationProperties.getProperty(Constants.EXCLUDE_PATTERNS), ","))
-                    : Collections.<String>emptyList();
+                    : Collections.emptyList();
 
             List<String> fileNames = resolveFileNames(pom, basedir, excludePatterns);
             if (getLogger().isDebugEnabled()) {
@@ -252,7 +250,7 @@ public class FilesetArchetypeCreator extends AbstractLogEnabled implements Arche
                     keepParent);
             getLogger().debug("Created Archetype " + archetypeDescriptor.getName() + " template pom(s)");
 
-            try (Writer out = WriterFactory.newXmlWriter(archetypeDescriptorFile)) {
+            try (Writer out = new XmlStreamWriter(archetypeDescriptorFile)) {
                 ArchetypeDescriptorXpp3Writer writer = new ArchetypeDescriptorXpp3Writer();
 
                 writer.write(out, archetypeDescriptor);
@@ -329,7 +327,7 @@ public class FilesetArchetypeCreator extends AbstractLogEnabled implements Arche
         }
 
         try (InputStream in = FilesetArchetypeCreator.class.getResourceAsStream("archetype.properties");
-                OutputStream out = new FileOutputStream(archetypePropertiesFile)) {
+                OutputStream out = Files.newOutputStream(archetypePropertiesFile.toPath())) {
             Properties archetypeProperties = new Properties();
             archetypeProperties.load(in);
 
@@ -449,7 +447,7 @@ public class FilesetArchetypeCreator extends AbstractLogEnabled implements Arche
         }
 
         try (InputStream in = FilesetArchetypeCreator.class.getResourceAsStream(name);
-                OutputStream out = new FileOutputStream(destination)) {
+                OutputStream out = Files.newOutputStream(destination.toPath())) {
             IOUtil.copy(in, out);
         }
     }
@@ -489,7 +487,7 @@ public class FilesetArchetypeCreator extends AbstractLogEnabled implements Arche
             File archetypeFilesDirectory,
             boolean preserveCData,
             boolean keepParent)
-            throws FileNotFoundException, IOException, XmlPullParserException {
+            throws IOException, XmlPullParserException {
         Model pom = pomManager.readPom(FileUtils.resolveFile(basedir, Constants.ARCHETYPE_POM));
 
         String parentArtifactId = pomReversedProperties.getProperty(Constants.PARENT_ARTIFACT_ID);
@@ -538,7 +536,7 @@ public class FilesetArchetypeCreator extends AbstractLogEnabled implements Arche
             Properties pomReversedProperties,
             boolean preserveCData,
             boolean keepParent)
-            throws IOException, FileNotFoundException, XmlPullParserException {
+            throws IOException, XmlPullParserException {
         setArtifactId(pomReversedProperties, pom.getArtifactId());
 
         for (String moduleId : pom.getModules()) {
@@ -735,7 +733,7 @@ public class FilesetArchetypeCreator extends AbstractLogEnabled implements Arche
         List<String> result = new ArrayList<>(toConcatenate.size());
 
         for (String concatenate : toConcatenate) {
-            result.add(((with.length() > 0) ? (with + "/" + concatenate) : concatenate));
+            result.add(((!with.isEmpty()) ? (with + "/" + concatenate) : concatenate));
         }
 
         return result;
@@ -850,8 +848,8 @@ public class FilesetArchetypeCreator extends AbstractLogEnabled implements Arche
 
             outputFile.getParentFile().mkdirs();
 
-            try (Reader in = ReaderFactory.newXmlReader(inputFile);
-                    Writer out = WriterFactory.newXmlWriter(outputFile)) {
+            try (Reader in = new XmlStreamReader(inputFile);
+                    Writer out = new XmlStreamWriter(outputFile)) {
                 String initialcontent = IOUtil.toString(in);
 
                 String content = getReversedContent(initialcontent, pomReversedProperties);
@@ -881,7 +879,7 @@ public class FilesetArchetypeCreator extends AbstractLogEnabled implements Arche
             pomManager.writePom(pom, outputFile, initialPomFile);
         }
 
-        try (Reader in = ReaderFactory.newXmlReader(initialPomFile)) {
+        try (Reader in = new XmlStreamReader(initialPomFile)) {
             String initialcontent = IOUtil.toString(in);
 
             Iterator<?> properties = pomReversedProperties.keySet().iterator();
@@ -1000,7 +998,7 @@ public class FilesetArchetypeCreator extends AbstractLogEnabled implements Arche
 
         List<String> excludePatterns = reverseProperties.getProperty(Constants.EXCLUDE_PATTERNS) != null
                 ? Arrays.asList(StringUtils.split(reverseProperties.getProperty(Constants.EXCLUDE_PATTERNS), ","))
-                : Collections.<String>emptyList();
+                : Collections.emptyList();
 
         List<String> fileNames = resolveFileNames(pom, basedir, excludePatterns);
 
@@ -1075,8 +1073,8 @@ public class FilesetArchetypeCreator extends AbstractLogEnabled implements Arche
 
             outputFile.getParentFile().mkdirs();
 
-            try (Reader in = ReaderFactory.newXmlReader(inputFile);
-                    Writer out = WriterFactory.newXmlWriter(outputFile)) {
+            try (Reader in = new XmlStreamReader(inputFile);
+                    Writer out = new XmlStreamWriter(outputFile)) {
                 String initialcontent = IOUtil.toString(in);
 
                 String content = getReversedContent(initialcontent, pomReversedProperties);
@@ -1126,7 +1124,7 @@ public class FilesetArchetypeCreator extends AbstractLogEnabled implements Arche
             pomManager.writePom(pom, outputFile, initialPomFile);
         }
 
-        try (Reader in = ReaderFactory.newXmlReader(initialPomFile)) {
+        try (Reader in = new XmlStreamReader(initialPomFile)) {
             String initialcontent = IOUtil.toString(in);
 
             for (Iterator<?> properties = pomReversedProperties.keySet().iterator(); properties.hasNext(); ) {
@@ -1160,7 +1158,7 @@ public class FilesetArchetypeCreator extends AbstractLogEnabled implements Arche
             directory = StringUtils.replace(directory, File.separator, "/");
 
             if (!groups.containsKey(directory)) {
-                groups.put(directory, new ArrayList<String>());
+                groups.put(directory, new ArrayList<>());
             }
 
             List<String> group = groups.get(directory);
@@ -1266,7 +1264,7 @@ public class FilesetArchetypeCreator extends AbstractLogEnabled implements Arche
 
             String fileEncoding = detector.isFound() ? detector.getCharset() : defaultEncoding;
 
-            String initialcontent = IOUtil.toString(new FileInputStream(inputFile), fileEncoding);
+            String initialcontent = IOUtil.toString(Files.newInputStream(inputFile.toPath()), fileEncoding);
 
             for (Iterator<?> properties = reverseProperties.keySet().iterator(); properties.hasNext(); ) {
                 String property = (String) properties.next();
@@ -1291,7 +1289,7 @@ public class FilesetArchetypeCreator extends AbstractLogEnabled implements Arche
                         .warn("Could not create new file \"" + outputFile.getPath() + "\" or the file already exists.");
             }
 
-            try (OutputStream os = new FileOutputStream(outputFile)) {
+            try (OutputStream os = Files.newOutputStream(outputFile.toPath())) {
                 write(content, os, fileEncoding);
             }
         }
diff --git a/archetype-common/src/main/java/org/apache/maven/archetype/exception/ArchetypeSelectionFailure.java b/archetype-common/src/main/java/org/apache/maven/archetype/exception/ArchetypeSelectionFailure.java
index 3227f066..9791b7ae 100644
--- a/archetype-common/src/main/java/org/apache/maven/archetype/exception/ArchetypeSelectionFailure.java
+++ b/archetype-common/src/main/java/org/apache/maven/archetype/exception/ArchetypeSelectionFailure.java
@@ -19,17 +19,8 @@
 package org.apache.maven.archetype.exception;
 
 public class ArchetypeSelectionFailure extends ArchetypeException {
-    public ArchetypeSelectionFailure() {}
 
     public ArchetypeSelectionFailure(String msg) {
         super(msg);
     }
-
-    public ArchetypeSelectionFailure(Throwable cause) {
-        super(cause);
-    }
-
-    public ArchetypeSelectionFailure(String msg, Throwable cause) {
-        super(msg, cause);
-    }
 }
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 15239199..c57eb8f6 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
@@ -25,14 +25,13 @@ import javax.xml.parsers.ParserConfigurationException;
 import javax.xml.transform.TransformerException;
 
 import java.io.File;
-import java.io.FileNotFoundException;
-import java.io.FileOutputStream;
 import java.io.IOException;
 import java.io.InputStream;
 import java.io.OutputStream;
 import java.io.OutputStreamWriter;
 import java.io.StringWriter;
 import java.io.Writer;
+import java.nio.file.Files;
 import java.util.ArrayList;
 import java.util.Iterator;
 import java.util.List;
@@ -184,7 +183,7 @@ public class DefaultFilesetArchetypeGenerator extends AbstractLogEnabled impleme
                     }
                 }
 
-                if (archetypeDescriptor.getModules().size() > 0) {
+                if (!archetypeDescriptor.getModules().isEmpty()) {
                     getLogger().info("Modules ignored in partial mode");
                 }
             } else {
@@ -282,7 +281,7 @@ public class DefaultFilesetArchetypeGenerator extends AbstractLogEnabled impleme
             }
 
             try (InputStream inputStream = archetypeZipFile.getInputStream(input);
-                    OutputStream out = new FileOutputStream(outFile)) {
+                    OutputStream out = Files.newOutputStream(outFile.toPath())) {
                 IOUtil.copy(inputStream, out);
             }
         }
@@ -301,7 +300,7 @@ public class DefaultFilesetArchetypeGenerator extends AbstractLogEnabled impleme
             String moduleOffset,
             boolean failIfExists,
             Context context)
-            throws OutputFileExists, FileNotFoundException, IOException {
+            throws OutputFileExists, IOException {
         int count = 0;
 
         for (String template : fileSetResources) {
@@ -358,7 +357,7 @@ public class DefaultFilesetArchetypeGenerator extends AbstractLogEnabled impleme
         while (matcher.find()) {
             String propertyToken = matcher.group(1);
             String contextPropertyValue = (String) context.get(propertyToken);
-            if (contextPropertyValue != null && contextPropertyValue.trim().length() > 0) {
+            if (contextPropertyValue != null && !contextPropertyValue.trim().isEmpty()) {
                 if (getLogger().isDebugEnabled()) {
                     getLogger()
                             .debug("Replacing property '" + propertyToken + "' in file path '" + filePath
@@ -463,7 +462,7 @@ public class DefaultFilesetArchetypeGenerator extends AbstractLogEnabled impleme
             Context context,
             String packageName,
             File outputDirectoryFile)
-            throws OutputFileExists, ArchetypeGenerationFailure, FileNotFoundException, IOException {
+            throws OutputFileExists, ArchetypeGenerationFailure, IOException {
         processTemplates(
                 packageName,
                 outputDirectoryFile,
@@ -483,7 +482,7 @@ public class DefaultFilesetArchetypeGenerator extends AbstractLogEnabled impleme
             Context context,
             String packageName,
             File outputDirectoryFile)
-            throws OutputFileExists, ArchetypeGenerationFailure, FileNotFoundException, IOException {
+            throws OutputFileExists, ArchetypeGenerationFailure, IOException {
         processTemplates(
                 packageName,
                 outputDirectoryFile,
@@ -739,7 +738,7 @@ public class DefaultFilesetArchetypeGenerator extends AbstractLogEnabled impleme
 
         getLogger().debug("Merging into " + outFile);
 
-        try (Writer writer = new OutputStreamWriter(new FileOutputStream(outFile), encoding)) {
+        try (Writer writer = new OutputStreamWriter(Files.newOutputStream(outFile.toPath()), encoding)) {
             StringWriter stringWriter = new StringWriter();
 
             velocity.getEngine().mergeTemplate(templateFileName, encoding, context, stringWriter);
diff --git a/archetype-common/src/main/java/org/apache/maven/archetype/old/ArchetypeNotFoundException.java b/archetype-common/src/main/java/org/apache/maven/archetype/old/ArchetypeNotFoundException.java
deleted file mode 100644
index 3b4a6980..00000000
--- a/archetype-common/src/main/java/org/apache/maven/archetype/old/ArchetypeNotFoundException.java
+++ /dev/null
@@ -1,39 +0,0 @@
-/*
- * 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.
- */
-package org.apache.maven.archetype.old;
-
-import org.apache.maven.archetype.exception.ArchetypeGenerationFailure;
-
-/**
- * @author <a href="mailto:jason@maven.org">Jason van Zyl</a>
- * @version $Id$
- */
-public class ArchetypeNotFoundException extends ArchetypeGenerationFailure {
-    public ArchetypeNotFoundException(String message) {
-        super(message);
-    }
-
-    public ArchetypeNotFoundException(Throwable cause) {
-        super(cause);
-    }
-
-    public ArchetypeNotFoundException(String message, Throwable cause) {
-        super(message, cause);
-    }
-}
diff --git a/archetype-common/src/main/java/org/apache/maven/archetype/old/ArchetypeTemplateProcessingException.java b/archetype-common/src/main/java/org/apache/maven/archetype/old/ArchetypeTemplateProcessingException.java
index 7d822e13..f90cf56b 100644
--- a/archetype-common/src/main/java/org/apache/maven/archetype/old/ArchetypeTemplateProcessingException.java
+++ b/archetype-common/src/main/java/org/apache/maven/archetype/old/ArchetypeTemplateProcessingException.java
@@ -29,10 +29,6 @@ public class ArchetypeTemplateProcessingException extends ArchetypeGenerationFai
         super(message);
     }
 
-    public ArchetypeTemplateProcessingException(Throwable cause) {
-        super(cause);
-    }
-
     public ArchetypeTemplateProcessingException(String message, Throwable cause) {
         super(message, cause);
     }
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 470ca4af..9f51255d 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
@@ -25,7 +25,6 @@ import javax.xml.parsers.ParserConfigurationException;
 import javax.xml.transform.TransformerException;
 
 import java.io.File;
-import java.io.FileOutputStream;
 import java.io.IOException;
 import java.io.InputStream;
 import java.io.OutputStream;
@@ -36,11 +35,11 @@ import java.io.Writer;
 import java.net.MalformedURLException;
 import java.net.URL;
 import java.net.URLClassLoader;
+import java.nio.file.Files;
 import java.util.HashMap;
 import java.util.Iterator;
 import java.util.Map;
 
-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;
@@ -61,9 +60,9 @@ import org.apache.velocity.context.Context;
 import org.codehaus.plexus.logging.AbstractLogEnabled;
 import org.codehaus.plexus.util.FileUtils;
 import org.codehaus.plexus.util.IOUtil;
-import org.codehaus.plexus.util.ReaderFactory;
 import org.codehaus.plexus.util.StringUtils;
-import org.codehaus.plexus.util.WriterFactory;
+import org.codehaus.plexus.util.xml.XmlStreamReader;
+import org.codehaus.plexus.util.xml.XmlStreamWriter;
 import org.codehaus.plexus.util.xml.pull.XmlPullParserException;
 import org.codehaus.plexus.velocity.VelocityComponent;
 import org.xml.sax.SAXException;
@@ -259,7 +258,7 @@ public class DefaultOldArchetype extends AbstractLogEnabled implements OldArchet
         Model parentModel = null;
         if (creating) {
             if (parentPomFile.exists()) {
-                try (Reader fileReader = ReaderFactory.newXmlReader(parentPomFile)) {
+                try (Reader fileReader = new XmlStreamReader(parentPomFile)) {
                     MavenXpp3Reader reader = new MavenXpp3Reader();
                     parentModel = reader.read(fileReader);
                     if (!"pom".equals(parentModel.getPackaging())) {
@@ -306,14 +305,14 @@ public class DefaultOldArchetype extends AbstractLogEnabled implements OldArchet
 
             boolean added;
             StringWriter w = new StringWriter();
-            try (Reader fileReader = ReaderFactory.newXmlReader(parentPomFile)) {
+            try (Reader fileReader = new XmlStreamReader(parentPomFile)) {
                 added = addModuleToParentPom(artifactId, fileReader, w);
             } catch (IOException | SAXException | ParserConfigurationException | TransformerException e) {
                 throw new ArchetypeTemplateProcessingException("Unable to rewrite parent POM", e);
             }
 
             if (added) {
-                try (Writer out = WriterFactory.newXmlWriter(parentPomFile)) {
+                try (Writer out = new XmlStreamWriter(parentPomFile)) {
                     IOUtil.copy(w.toString(), out);
                 } catch (IOException e) {
                     throw new ArchetypeTemplateProcessingException("Unable to rewrite parent POM", e);
@@ -368,7 +367,7 @@ public class DefaultOldArchetype extends AbstractLogEnabled implements OldArchet
 
         Model generatedModel;
 
-        try (Reader pomReader = ReaderFactory.newXmlReader(pomFile)) {
+        try (Reader pomReader = new XmlStreamReader(pomFile)) {
             MavenXpp3Reader reader = new MavenXpp3Reader();
 
             generatedModel = reader.read(pomReader);
@@ -389,7 +388,7 @@ public class DefaultOldArchetype extends AbstractLogEnabled implements OldArchet
             }
             generatedModel.setParent(parent);
 
-            try (Writer pomWriter = WriterFactory.newXmlWriter(pomFile)) {
+            try (Writer pomWriter = new XmlStreamWriter(pomFile)) {
                 MavenXpp3Writer writer = new MavenXpp3Writer();
                 writer.write(pomWriter, generatedModel);
             } catch (IOException e) {
@@ -444,7 +443,7 @@ public class DefaultOldArchetype extends AbstractLogEnabled implements OldArchet
         }
 
         // create resource director(y/ies) if specified in POM
-        if (foundBuildElement && build.getResources().size() > 0) {
+        if (foundBuildElement && !build.getResources().isEmpty()) {
             getLogger().debug("Overriding default resource directory ");
 
             overrideResourceDir = true;
@@ -475,7 +474,7 @@ public class DefaultOldArchetype extends AbstractLogEnabled implements OldArchet
         }
 
         // create test resource directory if specified in POM
-        if (foundBuildElement && build.getTestResources().size() > 0) {
+        if (foundBuildElement && !build.getTestResources().isEmpty()) {
             getLogger().debug("Overriding default test resource directory ");
 
             overrideTestResourceDir = true;
@@ -501,7 +500,7 @@ public class DefaultOldArchetype extends AbstractLogEnabled implements OldArchet
         // Main
         // ----------------------------------------------------------------------
 
-        if (descriptor.getSources().size() > 0) {
+        if (!descriptor.getSources().isEmpty()) {
             if (!overrideSrcDir) {
                 FileUtils.mkdir(outputDirectory + DEFAULT_SOURCE_DIR);
                 processSources(outputDirectory, context, descriptor, packageName, DEFAULT_SOURCE_DIR);
@@ -510,7 +509,7 @@ public class DefaultOldArchetype extends AbstractLogEnabled implements OldArchet
             }
         }
 
-        if (descriptor.getResources().size() > 0) {
+        if (!descriptor.getResources().isEmpty()) {
             if (!overrideResourceDir) {
                 FileUtils.mkdir(outputDirectory + DEFAULT_RESOURCE_DIR);
             }
@@ -521,7 +520,7 @@ public class DefaultOldArchetype extends AbstractLogEnabled implements OldArchet
         // Test
         // ----------------------------------------------------------------------
 
-        if (descriptor.getTestSources().size() > 0) {
+        if (!descriptor.getTestSources().isEmpty()) {
             if (!overrideTestSrcDir) {
                 FileUtils.mkdir(outputDirectory + DEFAULT_TEST_SOURCE_DIR);
                 processTestSources(outputDirectory, context, descriptor, packageName, DEFAULT_TEST_SOURCE_DIR);
@@ -530,7 +529,7 @@ public class DefaultOldArchetype extends AbstractLogEnabled implements OldArchet
             }
         }
 
-        if (descriptor.getTestResources().size() > 0) {
+        if (!descriptor.getTestResources().isEmpty()) {
             if (!overrideTestResourceDir) {
                 FileUtils.mkdir(outputDirectory + DEFAULT_TEST_RESOURCE_DIR);
             }
@@ -541,7 +540,7 @@ public class DefaultOldArchetype extends AbstractLogEnabled implements OldArchet
         // Site
         // ----------------------------------------------------------------------
 
-        if (descriptor.getSiteResources().size() > 0) {
+        if (!descriptor.getSiteResources().isEmpty()) {
             processSiteResources(outputDirectory, context, descriptor, packageName);
         }
     }
@@ -677,7 +676,7 @@ public class DefaultOldArchetype extends AbstractLogEnabled implements OldArchet
             if (extraPackages.startsWith("/")) {
                 extraPackages = extraPackages.substring(1);
             }
-            if (extraPackages.length() > 0) {
+            if (!extraPackages.isEmpty()) {
                 path += "/" + extraPackages;
             }
 
@@ -695,7 +694,7 @@ public class DefaultOldArchetype extends AbstractLogEnabled implements OldArchet
         }
 
         if (descriptor.isFiltered()) {
-            try (Writer writer = new OutputStreamWriter(new FileOutputStream(f), descriptor.getEncoding())) {
+            try (Writer writer = new OutputStreamWriter(Files.newOutputStream(f.toPath()), descriptor.getEncoding())) {
                 StringWriter stringWriter = new StringWriter();
 
                 template = ARCHETYPE_RESOURCES + "/" + template;
@@ -708,7 +707,7 @@ public class DefaultOldArchetype extends AbstractLogEnabled implements OldArchet
             }
         } else {
             try (InputStream is = getStream(ARCHETYPE_RESOURCES + "/" + template, null);
-                    OutputStream fos = new FileOutputStream(f)) {
+                    OutputStream fos = Files.newOutputStream(f.toPath())) {
                 IOUtil.copy(is, fos);
             } catch (Exception e) {
                 throw new ArchetypeTemplateProcessingException("Error copying file", e);
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 4b8c25cb..d721a8ca 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
@@ -46,8 +46,8 @@ public interface OldArchetype {
      * Download an archetype then create a project from it.
      */
     void createArchetype(ArchetypeGenerationRequest request)
-            throws UnknownArchetype, ArchetypeNotFoundException, ArchetypeDescriptorException,
-                    ArchetypeTemplateProcessingException, InvalidPackaging;
+            throws UnknownArchetype, ArchetypeDescriptorException, ArchetypeTemplateProcessingException,
+                    InvalidPackaging;
 
     /**
      * Create a project from an archetype file.
diff --git a/archetype-common/src/main/java/org/apache/maven/archetype/repositorycrawler/DefaultRepositoryCrawler.java b/archetype-common/src/main/java/org/apache/maven/archetype/repositorycrawler/DefaultRepositoryCrawler.java
index 830d9348..b56e7ad8 100644
--- a/archetype-common/src/main/java/org/apache/maven/archetype/repositorycrawler/DefaultRepositoryCrawler.java
+++ b/archetype-common/src/main/java/org/apache/maven/archetype/repositorycrawler/DefaultRepositoryCrawler.java
@@ -36,7 +36,7 @@ import org.apache.maven.archetype.exception.UnknownArchetype;
 import org.apache.maven.model.Model;
 import org.codehaus.plexus.logging.AbstractLogEnabled;
 import org.codehaus.plexus.util.StringUtils;
-import org.codehaus.plexus.util.WriterFactory;
+import org.codehaus.plexus.util.xml.XmlStreamWriter;
 import org.codehaus.plexus.util.xml.pull.XmlPullParserException;
 
 /**
@@ -131,7 +131,7 @@ public class DefaultRepositoryCrawler extends AbstractLogEnabled implements Repo
     public boolean writeCatalog(ArchetypeCatalog archetypeCatalog, File archetypeCatalogFile) {
         ArchetypeCatalogXpp3Writer catalogWriter = new ArchetypeCatalogXpp3Writer();
 
-        try (Writer fileWriter = WriterFactory.newXmlWriter(archetypeCatalogFile)) {
+        try (Writer fileWriter = new XmlStreamWriter(archetypeCatalogFile)) {
             catalogWriter.write(fileWriter, archetypeCatalog);
             return true;
         } catch (IOException ex) {
diff --git a/archetype-common/src/main/java/org/apache/maven/archetype/source/CatalogArchetypeDataSource.java b/archetype-common/src/main/java/org/apache/maven/archetype/source/CatalogArchetypeDataSource.java
index 0581c432..6cd6b115 100644
--- a/archetype-common/src/main/java/org/apache/maven/archetype/source/CatalogArchetypeDataSource.java
+++ b/archetype-common/src/main/java/org/apache/maven/archetype/source/CatalogArchetypeDataSource.java
@@ -27,17 +27,16 @@ import org.apache.maven.archetype.catalog.ArchetypeCatalog;
 import org.apache.maven.archetype.catalog.io.xpp3.ArchetypeCatalogXpp3Reader;
 import org.apache.maven.archetype.catalog.io.xpp3.ArchetypeCatalogXpp3Writer;
 import org.codehaus.plexus.logging.AbstractLogEnabled;
-import org.codehaus.plexus.util.WriterFactory;
+import org.codehaus.plexus.util.xml.XmlStreamWriter;
 import org.codehaus.plexus.util.xml.pull.XmlPullParserException;
 
 /**
  * @author Jason van Zyl
  */
 public abstract class CatalogArchetypeDataSource extends AbstractLogEnabled implements ArchetypeDataSource {
-    public static final String ARCHETYPE_CATALOG_PROPERTY = "file";
 
     protected void writeLocalCatalog(ArchetypeCatalog catalog, File catalogFile) throws ArchetypeDataSourceException {
-        try (Writer writer = WriterFactory.newXmlWriter(catalogFile)) {
+        try (Writer writer = new XmlStreamWriter(catalogFile)) {
             ArchetypeCatalogXpp3Writer catalogWriter = new ArchetypeCatalogXpp3Writer();
 
             catalogWriter.write(writer, catalog);
diff --git a/archetype-common/src/main/mdo/archetype.mdo b/archetype-common/src/main/mdo/archetype.mdo
index 0f7ea76c..948db05e 100644
--- a/archetype-common/src/main/mdo/archetype.mdo
+++ b/archetype-common/src/main/mdo/archetype.mdo
@@ -19,10 +19,10 @@ specific language governing permissions and limitations
 under the License.
 -->
 
-<model xmlns="https://codehaus-plexus.github.io/MODELLO/1.8.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-  xsi:schemaLocation="https://codehaus-plexus.github.io/MODELLO/1.8.0 https://codehaus-plexus.github.io/modello/xsd/modello-1.8.0.xsd"
-  xml.namespace="https://maven.apache.org/plugins/maven-archetype-plugin/archetype/${version}"
-  xml.schemaLocation="https://maven.apache.org/xsd/archetype-${version}.xsd">
+<model xmlns="http://codehaus-plexus.github.io/MODELLO/2.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+       xsi:schemaLocation="http://codehaus-plexus.github.io/MODELLO/2.0.0 https://codehaus-plexus.github.io/modello/xsd/modello-2.0.0.xsd"
+       xml.namespace="http://maven.apache.org/plugins/maven-archetype-plugin/archetype-catalog/${version}"
+       xml.schemaLocation="http://maven.apache.org/xsd/archetype-catalog-${version}.xsd">
   <id>archetype</id>
   <name>Archetype</name>
   <description>
diff --git a/archetype-common/src/test/java/org/apache/maven/archetype/common/util/TestXMLOutputter.java b/archetype-common/src/test/java/org/apache/maven/archetype/common/util/TestXMLOutputter.java
index f3495c79..98c1d134 100644
--- a/archetype-common/src/test/java/org/apache/maven/archetype/common/util/TestXMLOutputter.java
+++ b/archetype-common/src/test/java/org/apache/maven/archetype/common/util/TestXMLOutputter.java
@@ -41,7 +41,7 @@ public class TestXMLOutputter extends TestCase {
         StringWriter sw = new StringWriter();
         new XMLOutputter().output(doc, sw);
 
-        System.out.println("Resulting content is:\n\n\'" + sw.toString() + "\'\n\n");
+        System.out.println("Resulting content is:\n\n\'" + sw + "\'\n\n");
 
         assertTrue(sw.toString().indexOf(content) > -1);
     }
diff --git a/archetype-common/src/test/java/org/apache/maven/archetype/generator/DefaultArchetypeGeneratorTest.java b/archetype-common/src/test/java/org/apache/maven/archetype/generator/DefaultArchetypeGeneratorTest.java
index 5bc61059..fb9d5cc0 100644
--- a/archetype-common/src/test/java/org/apache/maven/archetype/generator/DefaultArchetypeGeneratorTest.java
+++ b/archetype-common/src/test/java/org/apache/maven/archetype/generator/DefaultArchetypeGeneratorTest.java
@@ -19,11 +19,10 @@
 package org.apache.maven.archetype.generator;
 
 import java.io.File;
-import java.io.FileInputStream;
-import java.io.FileNotFoundException;
 import java.io.IOException;
 import java.io.InputStream;
 import java.io.Reader;
+import java.nio.file.Files;
 import java.util.Properties;
 
 import org.apache.maven.archetype.ArchetypeGenerationRequest;
@@ -33,7 +32,7 @@ import org.apache.maven.model.io.xpp3.MavenXpp3Reader;
 import org.apache.maven.plugin.testing.AbstractMojoTestCase;
 import org.codehaus.plexus.component.repository.exception.ComponentLookupException;
 import org.codehaus.plexus.util.FileUtils;
-import org.codehaus.plexus.util.ReaderFactory;
+import org.codehaus.plexus.util.xml.XmlStreamReader;
 import org.codehaus.plexus.util.xml.pull.XmlPullParserException;
 import org.eclipse.aether.DefaultRepositorySystemSession;
 import org.eclipse.aether.RepositorySystem;
@@ -586,7 +585,7 @@ public class DefaultArchetypeGeneratorTest extends AbstractMojoTestCase {
         assertEquals("${packageInPathFormat}", properties.getProperty("packageInPathFormat"));
     }
 
-    private void copy(final File in, final File out) throws IOException, FileNotFoundException {
+    private void copy(final File in, final File out) throws IOException {
         assertTrue(!out.exists() || out.delete());
         assertFalse(out.exists());
 
@@ -596,9 +595,9 @@ public class DefaultArchetypeGeneratorTest extends AbstractMojoTestCase {
         assertTrue(in.exists());
     }
 
-    private Properties loadProperties(File propertyFile) throws IOException, FileNotFoundException {
+    private Properties loadProperties(File propertyFile) throws IOException {
         Properties properties = new Properties();
-        try (InputStream in = new FileInputStream(propertyFile)) {
+        try (InputStream in = Files.newInputStream(propertyFile.toPath())) {
             properties.load(in);
             return properties;
         }
@@ -610,8 +609,7 @@ public class DefaultArchetypeGeneratorTest extends AbstractMojoTestCase {
             fail("Missing File: " + templateFile);
         }
 
-        Properties properties = loadProperties(templateFile);
-        return properties;
+        return loadProperties(templateFile);
     }
 
     private File getProjectFile() {
@@ -623,7 +621,7 @@ public class DefaultArchetypeGeneratorTest extends AbstractMojoTestCase {
     }
 
     private Model readPom(final File pomFile) throws IOException, XmlPullParserException {
-        try (Reader pomReader = ReaderFactory.newXmlReader(pomFile)) {
+        try (Reader pomReader = new XmlStreamReader(pomFile)) {
             MavenXpp3Reader reader = new MavenXpp3Reader();
 
             return reader.read(pomReader);
diff --git a/archetype-common/src/test/java/org/apache/maven/archetype/old/descriptor/ArchetypeXsdTest.java b/archetype-common/src/test/java/org/apache/maven/archetype/old/descriptor/ArchetypeXsdTest.java
index d6a451f0..cc4dfa63 100644
--- a/archetype-common/src/test/java/org/apache/maven/archetype/old/descriptor/ArchetypeXsdTest.java
+++ b/archetype-common/src/test/java/org/apache/maven/archetype/old/descriptor/ArchetypeXsdTest.java
@@ -44,7 +44,7 @@ public class ArchetypeXsdTest extends PlexusTestCase {
                 "http://java.sun.com/xml/jaxp/properties/schemaLanguage", "http://www.w3.org/2001/XMLSchema");
         saxParser.setProperty("http://java.sun.com/xml/jaxp/properties/schemaSource", archetypeXsd);
 
-        try (InputStream in = getClass().getResourceAsStream("sample-archetype.xml"); ) {
+        try (InputStream in = getClass().getResourceAsStream("sample-archetype.xml")) {
             saxParser.parse(new InputSource(in), new Handler());
         }
     }
diff --git a/archetype-models/archetype-catalog/src/main/mdo/archetype-catalog.mdo b/archetype-models/archetype-catalog/src/main/mdo/archetype-catalog.mdo
index 268198f5..541f88c9 100644
--- a/archetype-models/archetype-catalog/src/main/mdo/archetype-catalog.mdo
+++ b/archetype-models/archetype-catalog/src/main/mdo/archetype-catalog.mdo
@@ -17,10 +17,10 @@
   ~ specific language governing permissions and limitations
   ~ under the License.
   -->
-<model xmlns="https://codehaus-plexus.github.io/MODELLO/1.4.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-  xsi:schemaLocation="https://codehaus-plexus.github.io/MODELLO/1.4.0 https://codehaus-plexus.github.io/modello/xsd/modello-1.4.0.xsd"
-  xml.namespace="http://maven.apache.org/plugins/maven-archetype-plugin/archetype-catalog/${version}"
-  xml.schemaLocation="http://maven.apache.org/xsd/archetype-catalog-${version}.xsd">
+<model xmlns="http://codehaus-plexus.github.io/MODELLO/2.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+       xsi:schemaLocation="http://codehaus-plexus.github.io/MODELLO/2.0.0 https://codehaus-plexus.github.io/modello/xsd/modello-2.0.0.xsd"
+       xml.namespace="http://maven.apache.org/plugins/maven-archetype-plugin/archetype-catalog/${version}"
+       xml.schemaLocation="http://maven.apache.org/xsd/archetype-catalog-${version}.xsd">
   <id>archetype-catalog</id>
   <name>ArchetypeCatalog</name>
   <description>
@@ -56,7 +56,7 @@
             <type>Archetype</type>
             <multiplicity>*</multiplicity>
           </association>
-          <description>List of Acthetypes available in this catalog.</description>
+          <description>List of Archetypes available in this catalog.</description>
         </field>
       </fields>
       <codeSegments>
@@ -73,7 +73,7 @@
 
     <class>
       <name>Archetype</name>
-      <description>Informations to point to an Archetype referenced in the catalog.</description>
+      <description>Information to point to an Archetype referenced in the catalog.</description>
       <fields>
         <field>
           <name>groupId</name>
diff --git a/archetype-models/archetype-descriptor/src/main/mdo/archetype-descriptor.mdo b/archetype-models/archetype-descriptor/src/main/mdo/archetype-descriptor.mdo
index b35579f7..9977c2f1 100644
--- a/archetype-models/archetype-descriptor/src/main/mdo/archetype-descriptor.mdo
+++ b/archetype-models/archetype-descriptor/src/main/mdo/archetype-descriptor.mdo
@@ -19,10 +19,10 @@
   -->
 
 <!-- START SNIPPET: modello-model --><!-- for https://maven.apache.org/guides/mini/guide-using-modello.html -->
-<model xmlns="https://codehaus-plexus.github.io/MODELLO/1.8.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-  xsi:schemaLocation="https://codehaus-plexus.github.io/MODELLO/1.8.0 https://codehaus-plexus.github.io/modello/xsd/modello-1.8.0.xsd"
-  xml.namespace="https://maven.apache.org/plugins/maven-archetype-plugin/archetype-descriptor/${version}"
-  xml.schemaLocation="http://maven.apache.org/xsd/archetype-descriptor-${version}.xsd">
+<model xmlns="http://codehaus-plexus.github.io/MODELLO/2.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+       xsi:schemaLocation="http://codehaus-plexus.github.io/MODELLO/2.0.0 https://codehaus-plexus.github.io/modello/xsd/modello-2.0.0.xsd"
+       xml.namespace="http://maven.apache.org/plugins/maven-archetype-plugin/archetype-catalog/${version}"
+       xml.schemaLocation="http://maven.apache.org/xsd/archetype-catalog-${version}.xsd">
   <id>archetype-descriptor</id>
   <name>ArchetypeDescriptor</name>
   <description>
diff --git a/archetype-samples/mojo/src/main/java/org/apache/maven/plugins/HelloMojo.java b/archetype-samples/mojo/src/main/java/org/apache/maven/plugins/HelloMojo.java
index c1ee1d19..a94eedc1 100644
--- a/archetype-samples/mojo/src/main/java/org/apache/maven/plugins/HelloMojo.java
+++ b/archetype-samples/mojo/src/main/java/org/apache/maven/plugins/HelloMojo.java
@@ -2,7 +2,6 @@ package org.apache.maven.plugins;
 
 import org.apache.maven.plugin.AbstractMojo;
 import org.apache.maven.plugin.MojoExecutionException;
-import org.apache.maven.plugin.MojoFailureException;
 
 /**
  * Says Hello to someone.
@@ -16,7 +15,7 @@ public class HelloMojo extends AbstractMojo {
      */
     String toWhom;
 
-    public void execute() throws MojoExecutionException, MojoFailureException {
+    public void execute() throws MojoExecutionException {
         getLog().info("Hello " + toWhom + "!");
     }
 }
\ No newline at end of file
diff --git a/maven-archetype-plugin/src/main/java/org/apache/maven/archetype/mojos/CrawlRepositoryMojo.java b/maven-archetype-plugin/src/main/java/org/apache/maven/archetype/mojos/CrawlRepositoryMojo.java
index 92be7763..df752445 100644
--- a/maven-archetype-plugin/src/main/java/org/apache/maven/archetype/mojos/CrawlRepositoryMojo.java
+++ b/maven-archetype-plugin/src/main/java/org/apache/maven/archetype/mojos/CrawlRepositoryMojo.java
@@ -24,7 +24,6 @@ import org.apache.maven.archetype.catalog.ArchetypeCatalog;
 import org.apache.maven.archetype.repositorycrawler.RepositoryCrawler;
 import org.apache.maven.plugin.AbstractMojo;
 import org.apache.maven.plugin.MojoExecutionException;
-import org.apache.maven.plugin.MojoFailureException;
 import org.apache.maven.plugins.annotations.Component;
 import org.apache.maven.plugins.annotations.Mojo;
 import org.apache.maven.plugins.annotations.Parameter;
@@ -52,11 +51,11 @@ public class CrawlRepositoryMojo extends AbstractMojo {
     private File repository;
 
     @Override
-    public void execute() throws MojoExecutionException, MojoFailureException {
+    public void execute() throws MojoExecutionException {
         getLog().debug("repository " + repository + ", catalogFile " + catalogFile);
 
         if (repository == null) {
-            throw new MojoFailureException("The repository is not defined. Use -Drepository=/path/to/repository");
+            throw new MojoExecutionException("The repository is not defined. Use -Drepository=/path/to/repository");
         }
 
         ArchetypeCatalog catalog = crawler.crawl(repository);
diff --git a/maven-archetype-plugin/src/main/java/org/apache/maven/archetype/mojos/CreateArchetypeFromProjectMojo.java b/maven-archetype-plugin/src/main/java/org/apache/maven/archetype/mojos/CreateArchetypeFromProjectMojo.java
index dbd76efd..f5db439e 100644
--- a/maven-archetype-plugin/src/main/java/org/apache/maven/archetype/mojos/CreateArchetypeFromProjectMojo.java
+++ b/maven-archetype-plugin/src/main/java/org/apache/maven/archetype/mojos/CreateArchetypeFromProjectMojo.java
@@ -33,7 +33,6 @@ import org.apache.maven.archetype.ui.creation.ArchetypeCreationConfigurator;
 import org.apache.maven.execution.MavenSession;
 import org.apache.maven.plugin.AbstractMojo;
 import org.apache.maven.plugin.MojoExecutionException;
-import org.apache.maven.plugin.MojoFailureException;
 import org.apache.maven.plugins.annotations.Component;
 import org.apache.maven.plugins.annotations.Execute;
 import org.apache.maven.plugins.annotations.LifecyclePhase;
@@ -220,8 +219,11 @@ public class CreateArchetypeFromProjectMojo extends AbstractMojo {
     private MavenSession session;
 
     @Override
-    public void execute() throws MojoExecutionException, MojoFailureException {
-        Properties executionProperties = session.getExecutionProperties();
+    public void execute() throws MojoExecutionException {
+
+        Properties executionProperties = new Properties(session.getSystemProperties());
+        executionProperties.putAll(session.getUserProperties());
+
         try {
             if (propertyFile != null) {
                 propertyFile.getParentFile().mkdirs();
@@ -253,10 +255,7 @@ public class CreateArchetypeFromProjectMojo extends AbstractMojo {
             ArchetypeCreationResult result = manager.createArchetypeFromProject(request);
 
             if (result.getCause() != null) {
-                throw new MojoFailureException(
-                        result.getCause(),
-                        result.getCause().getMessage(),
-                        result.getCause().getMessage());
+                throw new MojoExecutionException(result.getCause().getMessage(), result.getCause());
             }
 
             getLog().info("Archetype project created in " + outputDirectory);
@@ -273,10 +272,8 @@ public class CreateArchetypeFromProjectMojo extends AbstractMojo {
                 // This of course would be strung together from the outside.
             }
 
-        } catch (MojoFailureException ex) {
-            throw ex;
         } catch (Exception ex) {
-            throw new MojoFailureException(ex, ex.getMessage(), ex.getMessage());
+            throw new MojoExecutionException(ex.getMessage(), ex);
         }
     }
 
diff --git a/maven-archetype-plugin/src/main/java/org/apache/maven/archetype/mojos/CreateProjectFromArchetypeMojo.java b/maven-archetype-plugin/src/main/java/org/apache/maven/archetype/mojos/CreateProjectFromArchetypeMojo.java
index 6cc53e07..c095be35 100644
--- a/maven-archetype-plugin/src/main/java/org/apache/maven/archetype/mojos/CreateProjectFromArchetypeMojo.java
+++ b/maven-archetype-plugin/src/main/java/org/apache/maven/archetype/mojos/CreateProjectFromArchetypeMojo.java
@@ -32,7 +32,6 @@ import org.apache.maven.execution.MavenSession;
 import org.apache.maven.plugin.AbstractMojo;
 import org.apache.maven.plugin.ContextEnabled;
 import org.apache.maven.plugin.MojoExecutionException;
-import org.apache.maven.plugin.MojoFailureException;
 import org.apache.maven.plugins.annotations.Component;
 import org.apache.maven.plugins.annotations.Execute;
 import org.apache.maven.plugins.annotations.LifecyclePhase;
@@ -164,7 +163,7 @@ public class CreateProjectFromArchetypeMojo extends AbstractMojo implements Cont
     private String filter;
 
     @Override
-    public void execute() throws MojoExecutionException, MojoFailureException {
+    public void execute() throws MojoExecutionException {
         Properties executionProperties = session.getUserProperties();
 
         ArchetypeGenerationRequest request = new ArchetypeGenerationRequest()
@@ -196,15 +195,10 @@ public class CreateProjectFromArchetypeMojo extends AbstractMojo implements Cont
             ArchetypeGenerationResult generationResult = manager.generateProjectFromArchetype(request);
 
             if (generationResult.getCause() != null) {
-                throw new MojoFailureException(
-                        generationResult.getCause(),
-                        generationResult.getCause().getMessage(),
-                        generationResult.getCause().getMessage());
+                throw new MojoExecutionException(generationResult.getCause().getMessage(), generationResult.getCause());
             }
-        } catch (MojoFailureException ex) {
-            throw ex;
         } catch (Exception ex) {
-            throw (MojoFailureException) new MojoFailureException(ex.getMessage()).initCause(ex);
+            throw new MojoExecutionException(ex.getMessage(), ex);
         }
 
         String artifactId = request.getArtifactId();
@@ -220,8 +214,7 @@ public class CreateProjectFromArchetypeMojo extends AbstractMojo implements Cont
         }
     }
 
-    private void invokePostArchetypeGenerationGoals(String goals, String artifactId)
-            throws MojoExecutionException, MojoFailureException {
+    private void invokePostArchetypeGenerationGoals(String goals, String artifactId) throws MojoExecutionException {
         getLog().info("Invoking post-archetype-generation goals: " + goals);
 
         File projectBasedir = new File(outputDirectory, artifactId);
diff --git a/maven-archetype-plugin/src/main/java/org/apache/maven/archetype/mojos/IntegrationTestMojo.java b/maven-archetype-plugin/src/main/java/org/apache/maven/archetype/mojos/IntegrationTestMojo.java
index 86e3015b..4543ed4c 100644
--- a/maven-archetype-plugin/src/main/java/org/apache/maven/archetype/mojos/IntegrationTestMojo.java
+++ b/maven-archetype-plugin/src/main/java/org/apache/maven/archetype/mojos/IntegrationTestMojo.java
@@ -20,7 +20,6 @@ package org.apache.maven.archetype.mojos;
 
 import java.io.BufferedReader;
 import java.io.File;
-import java.io.FileInputStream;
 import java.io.FileReader;
 import java.io.FileWriter;
 import java.io.IOException;
@@ -28,6 +27,7 @@ import java.io.InputStream;
 import java.io.Reader;
 import java.io.StringWriter;
 import java.io.Writer;
+import java.nio.file.Files;
 import java.util.Arrays;
 import java.util.Collection;
 import java.util.HashMap;
@@ -49,7 +49,6 @@ import org.apache.maven.archetype.generator.ArchetypeGenerator;
 import org.apache.maven.execution.MavenSession;
 import org.apache.maven.plugin.AbstractMojo;
 import org.apache.maven.plugin.MojoExecutionException;
-import org.apache.maven.plugin.MojoFailureException;
 import org.apache.maven.plugins.annotations.Component;
 import org.apache.maven.plugins.annotations.Mojo;
 import org.apache.maven.plugins.annotations.Parameter;
@@ -66,10 +65,10 @@ import org.apache.maven.shared.scriptinterpreter.ScriptRunner;
 import org.codehaus.plexus.util.FileUtils;
 import org.codehaus.plexus.util.IOUtil;
 import org.codehaus.plexus.util.InterpolationFilterReader;
-import org.codehaus.plexus.util.ReaderFactory;
 import org.codehaus.plexus.util.StringUtils;
-import org.codehaus.plexus.util.WriterFactory;
 import org.codehaus.plexus.util.introspection.ReflectionValueExtractor;
+import org.codehaus.plexus.util.xml.XmlStreamReader;
+import org.codehaus.plexus.util.xml.XmlStreamWriter;
 import org.slf4j.LoggerFactory;
 
 /**
@@ -273,7 +272,7 @@ public class IntegrationTestMojo extends AbstractMojo {
     private Map<String, String> properties = new HashMap<>();
 
     @Override
-    public void execute() throws MojoExecutionException, MojoFailureException {
+    public void execute() throws MojoExecutionException {
         if (skip) {
             return;
         }
@@ -287,7 +286,7 @@ public class IntegrationTestMojo extends AbstractMojo {
         File archetypeFile = project.getArtifact().getFile();
 
         if (archetypeFile == null) {
-            throw new MojoFailureException("Unable to get the archetypes' artifact which should have just been built:"
+            throw new MojoExecutionException("Unable to get the archetypes' artifact which should have just been built:"
                     + " you probably launched 'mvn archetype:integration-test' instead of"
                     + " 'mvn integration-test'.");
         }
@@ -295,7 +294,7 @@ public class IntegrationTestMojo extends AbstractMojo {
         try {
             List<File> projectsGoalFiles = FileUtils.getFiles(testProjectsDirectory, "**/goal.txt", "");
 
-            if (projectsGoalFiles.size() == 0) {
+            if (projectsGoalFiles.isEmpty()) {
                 getLog().warn("No Archetype IT projects: no directory with goal.txt found.");
 
                 return;
@@ -317,7 +316,7 @@ public class IntegrationTestMojo extends AbstractMojo {
                 throw new MojoExecutionException(errors);
             }
         } catch (IOException ex) {
-            throw new MojoFailureException(ex, ex.getMessage(), ex.getMessage());
+            throw new MojoExecutionException(ex.getMessage(), ex);
         }
     }
 
@@ -419,7 +418,7 @@ public class IntegrationTestMojo extends AbstractMojo {
     private Properties loadProperties(final File propertiesFile) throws IOException {
         Properties properties = new Properties();
 
-        try (InputStream in = new FileInputStream(propertiesFile)) {
+        try (InputStream in = Files.newInputStream(propertiesFile.toPath())) {
             properties.load(in);
         }
 
@@ -671,7 +670,7 @@ public class IntegrationTestMojo extends AbstractMojo {
         return logger;
     }
 
-    class IntegrationTestFailure extends Exception {
+    static class IntegrationTestFailure extends Exception {
         IntegrationTestFailure() {
             super();
         }
@@ -720,12 +719,12 @@ public class IntegrationTestMojo extends AbstractMojo {
             // interpolation with token @...@
             Map<String, Object> composite = getInterpolationValueSource();
 
-            try (Reader xmlStreamReader = ReaderFactory.newXmlReader(originalFile);
+            try (Reader xmlStreamReader = new XmlStreamReader(originalFile);
                     Reader reader = new InterpolationFilterReader(xmlStreamReader, composite, "@", "@")) {
                 xml = IOUtil.toString(reader);
             }
 
-            try (Writer writer = WriterFactory.newXmlWriter(interpolatedFile)) {
+            try (Writer writer = new XmlStreamWriter(interpolatedFile)) {
                 interpolatedFile.getParentFile().mkdirs();
 
                 writer.write(xml);
@@ -760,7 +759,7 @@ public class IntegrationTestMojo extends AbstractMojo {
                 throw new IllegalArgumentException("no project specified");
             }
             this.mavenProject = mavenProject;
-            this.properties = properties == null ? (Map) new Properties() : properties;
+            this.properties = properties == null ? new HashMap<>() : properties;
         }
 
         /**
diff --git a/maven-archetype-plugin/src/main/java/org/apache/maven/archetype/mojos/JarMojo.java b/maven-archetype-plugin/src/main/java/org/apache/maven/archetype/mojos/JarMojo.java
index a3bd0e1e..599c6609 100644
--- a/maven-archetype-plugin/src/main/java/org/apache/maven/archetype/mojos/JarMojo.java
+++ b/maven-archetype-plugin/src/main/java/org/apache/maven/archetype/mojos/JarMojo.java
@@ -31,7 +31,6 @@ import org.apache.maven.archiver.MavenArchiver;
 import org.apache.maven.execution.MavenSession;
 import org.apache.maven.plugin.AbstractMojo;
 import org.apache.maven.plugin.MojoExecutionException;
-import org.apache.maven.plugin.MojoFailureException;
 import org.apache.maven.plugins.annotations.Component;
 import org.apache.maven.plugins.annotations.LifecyclePhase;
 import org.apache.maven.plugins.annotations.Mojo;
@@ -123,7 +122,7 @@ public class JarMojo extends AbstractMojo {
     private ArchetypeArtifactManager archetypeArtifactManager;
 
     @Override
-    public void execute() throws MojoExecutionException, MojoFailureException {
+    public void execute() throws MojoExecutionException {
         File jarFile = new File(outputDirectory, finalName + ".jar");
         getLog().info("Building archetype jar: " + jarFile);
 
@@ -135,7 +134,7 @@ public class JarMojo extends AbstractMojo {
         archiver.setArchiver((JarArchiver) archivers.get("jar"));
 
         // configure for Reproducible Builds based on outputTimestamp value
-        archiver.configureReproducible(outputTimestamp);
+        archiver.configureReproducibleBuild(outputTimestamp);
 
         try {
             DefaultFileSet fs = DefaultFileSet.fileSet(archetypeDirectory)
diff --git a/maven-archetype-plugin/src/main/java/org/apache/maven/archetype/ui/ArchetypeFactory.java b/maven-archetype-plugin/src/main/java/org/apache/maven/archetype/ui/ArchetypeFactory.java
index 13adcf31..2461e867 100644
--- a/maven-archetype-plugin/src/main/java/org/apache/maven/archetype/ui/ArchetypeFactory.java
+++ b/maven-archetype-plugin/src/main/java/org/apache/maven/archetype/ui/ArchetypeFactory.java
@@ -23,7 +23,6 @@ import java.util.Properties;
 import org.apache.maven.project.MavenProject;
 
 public interface ArchetypeFactory {
-    String ROLE = ArchetypeFactory.class.getName();
 
     ArchetypeDefinition createArchetypeDefinition(Properties properties);
 
diff --git a/maven-archetype-plugin/src/main/java/org/apache/maven/archetype/ui/creation/ArchetypeCreationConfigurator.java b/maven-archetype-plugin/src/main/java/org/apache/maven/archetype/ui/creation/ArchetypeCreationConfigurator.java
index 90b70932..30c8f647 100644
--- a/maven-archetype-plugin/src/main/java/org/apache/maven/archetype/ui/creation/ArchetypeCreationConfigurator.java
+++ b/maven-archetype-plugin/src/main/java/org/apache/maven/archetype/ui/creation/ArchetypeCreationConfigurator.java
@@ -19,14 +19,12 @@
 package org.apache.maven.archetype.ui.creation;
 
 import java.io.File;
-import java.io.FileNotFoundException;
 import java.io.IOException;
 import java.util.List;
 import java.util.Properties;
 
 import org.apache.maven.archetype.exception.ArchetypeNotConfigured;
 import org.apache.maven.archetype.exception.ArchetypeNotDefined;
-import org.apache.maven.archetype.exception.TemplateCreationException;
 import org.apache.maven.project.MavenProject;
 import org.codehaus.plexus.components.interactivity.PrompterException;
 
@@ -34,7 +32,6 @@ import org.codehaus.plexus.components.interactivity.PrompterException;
  * Configurator component to organize steps for archetype creation from a project.
  */
 public interface ArchetypeCreationConfigurator {
-    String ROLE = ArchetypeCreationConfigurator.class.getName();
 
     Properties configureArchetypeCreation(
             MavenProject project,
@@ -42,6 +39,5 @@ public interface ArchetypeCreationConfigurator {
             Properties commandLineProperties,
             File propertyFile,
             List<String> languages)
-            throws FileNotFoundException, IOException, ArchetypeNotDefined, ArchetypeNotConfigured, PrompterException,
-                    TemplateCreationException;
+            throws IOException, ArchetypeNotDefined, ArchetypeNotConfigured, PrompterException;
 }
diff --git a/maven-archetype-plugin/src/main/java/org/apache/maven/archetype/ui/creation/ArchetypeCreationQueryer.java b/maven-archetype-plugin/src/main/java/org/apache/maven/archetype/ui/creation/ArchetypeCreationQueryer.java
index a0e07248..ead9f987 100644
--- a/maven-archetype-plugin/src/main/java/org/apache/maven/archetype/ui/creation/ArchetypeCreationQueryer.java
+++ b/maven-archetype-plugin/src/main/java/org/apache/maven/archetype/ui/creation/ArchetypeCreationQueryer.java
@@ -27,7 +27,6 @@ import org.codehaus.plexus.components.interactivity.PrompterException;
  * TODO this interface is bound to its implementation through the prompter exception
  */
 public interface ArchetypeCreationQueryer {
-    String ROLE = ArchetypeCreationQueryer.class.getName();
 
     /**
      */
diff --git a/maven-archetype-plugin/src/main/java/org/apache/maven/archetype/ui/creation/DefaultArchetypeCreationConfigurator.java b/maven-archetype-plugin/src/main/java/org/apache/maven/archetype/ui/creation/DefaultArchetypeCreationConfigurator.java
index 7aa0f529..11f76ab9 100644
--- a/maven-archetype-plugin/src/main/java/org/apache/maven/archetype/ui/creation/DefaultArchetypeCreationConfigurator.java
+++ b/maven-archetype-plugin/src/main/java/org/apache/maven/archetype/ui/creation/DefaultArchetypeCreationConfigurator.java
@@ -23,13 +23,10 @@ import javax.inject.Named;
 import javax.inject.Singleton;
 
 import java.io.File;
-import java.io.FileInputStream;
-import java.io.FileNotFoundException;
-import java.io.FileOutputStream;
 import java.io.IOException;
 import java.io.InputStream;
-import java.io.OutputStream;
-import java.util.Iterator;
+import java.nio.file.Files;
+import java.nio.file.NoSuchFileException;
 import java.util.List;
 import java.util.Properties;
 
@@ -37,7 +34,6 @@ import org.apache.maven.archetype.common.ArchetypeFilesResolver;
 import org.apache.maven.archetype.common.Constants;
 import org.apache.maven.archetype.exception.ArchetypeNotConfigured;
 import org.apache.maven.archetype.exception.ArchetypeNotDefined;
-import org.apache.maven.archetype.exception.TemplateCreationException;
 import org.apache.maven.archetype.ui.ArchetypeConfiguration;
 import org.apache.maven.archetype.ui.ArchetypeDefinition;
 import org.apache.maven.archetype.ui.ArchetypeFactory;
@@ -65,8 +61,7 @@ public class DefaultArchetypeCreationConfigurator extends AbstractLogEnabled imp
             Properties commandLineProperties,
             File propertyFile,
             List<String> languages)
-            throws IOException, ArchetypeNotDefined, ArchetypeNotConfigured, PrompterException,
-                    TemplateCreationException {
+            throws IOException, ArchetypeNotDefined, ArchetypeNotConfigured, PrompterException {
         Properties properties = initialiseArchetypeProperties(commandLineProperties, propertyFile);
 
         ArchetypeDefinition archetypeDefinition = archetypeFactory.createArchetypeDefinition(properties);
@@ -250,46 +245,16 @@ public class DefaultArchetypeCreationConfigurator extends AbstractLogEnabled imp
         return archetypeFactory.createArchetypeConfiguration(project, archetypeDefinition, properties);
     }
 
-    public void readProperties(Properties properties, File propertyFile) throws IOException {
+    private void readProperties(Properties properties, File propertyFile) throws IOException {
         getLogger().debug("Reading property file " + propertyFile);
 
-        try (InputStream is = new FileInputStream(propertyFile)) {
+        try (InputStream is = Files.newInputStream(propertyFile.toPath())) {
             properties.load(is);
 
             getLogger().debug("Read " + properties.size() + " properties");
         }
     }
 
-    public void writeProperties(Properties properties, File propertyFile) throws IOException {
-        Properties storedProperties = new Properties();
-        try {
-            readProperties(storedProperties, propertyFile);
-        } catch (FileNotFoundException ex) {
-            getLogger().debug("Property file not found. Creating a new one");
-        }
-
-        getLogger().debug("Adding " + properties.size() + " properties");
-
-        Iterator<?> propertiesIterator = properties.keySet().iterator();
-        while (propertiesIterator.hasNext()) {
-            String propertyKey = (String) propertiesIterator.next();
-            storedProperties.setProperty(propertyKey, properties.getProperty(propertyKey));
-        }
-
-        propertyFile.getParentFile().mkdirs();
-
-        if (!propertyFile.exists() && !propertyFile.createNewFile()) {
-            getLogger()
-                    .warn("Could not create new file \"" + propertyFile.getPath() + "\" or the file already exists.");
-        }
-
-        try (OutputStream os = new FileOutputStream(propertyFile)) {
-            storedProperties.store(os, "");
-
-            getLogger().debug("Stored " + storedProperties.size() + " properties");
-        }
-    }
-
     private Properties initialiseArchetypeProperties(Properties commandLineProperties, File propertyFile)
             throws IOException {
         Properties properties = new Properties();
@@ -297,7 +262,7 @@ public class DefaultArchetypeCreationConfigurator extends AbstractLogEnabled imp
         if (propertyFile != null) {
             try {
                 readProperties(properties, propertyFile);
-            } catch (FileNotFoundException ex) {
+            } catch (NoSuchFileException ex) {
                 getLogger().debug(propertyFile.getName() + "  does not exist");
             }
         }
diff --git a/maven-archetype-plugin/src/main/java/org/apache/maven/archetype/ui/creation/DefaultArchetypeCreationQueryer.java b/maven-archetype-plugin/src/main/java/org/apache/maven/archetype/ui/creation/DefaultArchetypeCreationQueryer.java
index 500e95e8..f9481b98 100644
--- a/maven-archetype-plugin/src/main/java/org/apache/maven/archetype/ui/creation/DefaultArchetypeCreationQueryer.java
+++ b/maven-archetype-plugin/src/main/java/org/apache/maven/archetype/ui/creation/DefaultArchetypeCreationQueryer.java
@@ -69,9 +69,7 @@ public class DefaultArchetypeCreationQueryer extends AbstractLogEnabled implemen
     public String askNewPropertyKey() throws PrompterException {
         String query = "Define property key";
 
-        String answer = prompter.prompt(query);
-
-        return answer;
+        return prompter.prompt(query);
     }
 
     @Override
diff --git a/maven-archetype-plugin/src/main/java/org/apache/maven/archetype/ui/generation/ArchetypeSelectionQueryer.java b/maven-archetype-plugin/src/main/java/org/apache/maven/archetype/ui/generation/ArchetypeSelectionQueryer.java
index fa7f6472..c419c815 100644
--- a/maven-archetype-plugin/src/main/java/org/apache/maven/archetype/ui/generation/ArchetypeSelectionQueryer.java
+++ b/maven-archetype-plugin/src/main/java/org/apache/maven/archetype/ui/generation/ArchetypeSelectionQueryer.java
@@ -31,12 +31,9 @@ import org.codehaus.plexus.components.interactivity.PrompterException;
  * TODO this interface is bound to its implementation through the prompter exception
  */
 public interface ArchetypeSelectionQueryer {
-    String ROLE = ArchetypeSelectionQueryer.class.getName();
 
     Archetype selectArchetype(Map<String, List<Archetype>> map) throws PrompterException;
 
-    boolean confirmSelection(ArchetypeDefinition archetypeDefinition) throws PrompterException;
-
     /**
      * Select an archetype from the given map.
      *
diff --git a/maven-archetype-plugin/src/main/java/org/apache/maven/archetype/ui/generation/DefaultArchetypeSelectionQueryer.java b/maven-archetype-plugin/src/main/java/org/apache/maven/archetype/ui/generation/DefaultArchetypeSelectionQueryer.java
index 6bc551de..59b1c85e 100644
--- a/maven-archetype-plugin/src/main/java/org/apache/maven/archetype/ui/generation/DefaultArchetypeSelectionQueryer.java
+++ b/maven-archetype-plugin/src/main/java/org/apache/maven/archetype/ui/generation/DefaultArchetypeSelectionQueryer.java
@@ -23,7 +23,6 @@ import javax.inject.Named;
 import javax.inject.Singleton;
 
 import java.util.ArrayList;
-import java.util.Arrays;
 import java.util.HashMap;
 import java.util.HashSet;
 import java.util.List;
@@ -49,16 +48,6 @@ public class DefaultArchetypeSelectionQueryer extends AbstractLogEnabled impleme
     @Named("archetype")
     private Prompter prompter;
 
-    @Override
-    public boolean confirmSelection(ArchetypeDefinition archetypeDefinition) throws PrompterException {
-        String query = "Confirm archetype selection: \n" + archetypeDefinition.getGroupId() + "/"
-                + archetypeDefinition.getName() + "\n";
-
-        String answer = prompter.prompt(query, Arrays.asList(new String[] {"Y", "N"}), "Y");
-
-        return "Y".equalsIgnoreCase(answer);
-    }
-
     @Override
     public Archetype selectArchetype(Map<String, List<Archetype>> catalogs) throws PrompterException {
         return selectArchetype(catalogs, null);
@@ -128,7 +117,7 @@ public class DefaultArchetypeSelectionQueryer extends AbstractLogEnabled impleme
                 answer = prompter.prompt(query.toString(), Integer.toString(defaultSelection));
             }
 
-            if (NumberUtils.isNumber(answer)) {
+            if (NumberUtils.isCreatable(answer)) {
                 selection = archetypeAnswerMap.get(answer);
             } else {
                 // not a number so apply filter and ask again
diff --git a/maven-archetype-plugin/src/main/java/org/apache/maven/archetype/ui/generation/DefaultArchetypeSelector.java b/maven-archetype-plugin/src/main/java/org/apache/maven/archetype/ui/generation/DefaultArchetypeSelector.java
index 00c68022..a58a2549 100644
--- a/maven-archetype-plugin/src/main/java/org/apache/maven/archetype/ui/generation/DefaultArchetypeSelector.java
+++ b/maven-archetype-plugin/src/main/java/org/apache/maven/archetype/ui/generation/DefaultArchetypeSelector.java
@@ -133,7 +133,7 @@ public class DefaultArchetypeSelector extends AbstractLogEnabled implements Arch
                 definition.setArtifactId(DEFAULT_ARCHETYPE_ARTIFACTID);
             }
 
-            if (interactiveMode.booleanValue() && (archetypes.size() > 0)) {
+            if (interactiveMode.booleanValue() && (!archetypes.isEmpty())) {
                 Archetype selectedArchetype = archetypeSelectionQueryer.selectArchetype(archetypes, definition);
 
                 updateDefinition(definition, selectedArchetype);
diff --git a/maven-archetype-plugin/src/test/java/org/apache/maven/archetype/ui/generation/DefaultArchetypeGenerationQueryerTest.java b/maven-archetype-plugin/src/test/java/org/apache/maven/archetype/ui/generation/DefaultArchetypeGenerationQueryerTest.java
index 3b7b113b..65d404a4 100644
--- a/maven-archetype-plugin/src/test/java/org/apache/maven/archetype/ui/generation/DefaultArchetypeGenerationQueryerTest.java
+++ b/maven-archetype-plugin/src/test/java/org/apache/maven/archetype/ui/generation/DefaultArchetypeGenerationQueryerTest.java
@@ -45,8 +45,8 @@ public class DefaultArchetypeGenerationQueryerTest extends PlexusTestCase {
     public void testPropertyRegexValidationRetry() throws PrompterException {
         Prompter prompter = EasyMock.createMock(Prompter.class);
 
-        EasyMock.expect(prompter.prompt(EasyMock.<String>anyObject())).andReturn("invalid-answer");
-        EasyMock.expect(prompter.prompt(EasyMock.<String>anyObject())).andReturn("valid-answer");
+        EasyMock.expect(prompter.prompt(EasyMock.anyObject())).andReturn("invalid-answer");
+        EasyMock.expect(prompter.prompt(EasyMock.anyObject())).andReturn("valid-answer");
 
         EasyMock.replay(prompter);
         queryer.setPrompter(prompter);
diff --git a/maven-archetype-plugin/src/test/java/org/apache/maven/archetype/ui/generation/DefaultArchetypeSelectionQueryerTest.java b/maven-archetype-plugin/src/test/java/org/apache/maven/archetype/ui/generation/DefaultArchetypeSelectionQueryerTest.java
index 922d8358..17f8df21 100644
--- a/maven-archetype-plugin/src/test/java/org/apache/maven/archetype/ui/generation/DefaultArchetypeSelectionQueryerTest.java
+++ b/maven-archetype-plugin/src/test/java/org/apache/maven/archetype/ui/generation/DefaultArchetypeSelectionQueryerTest.java
@@ -43,7 +43,7 @@ public class DefaultArchetypeSelectionQueryerTest extends PlexusTestCase {
     public void setUp() throws Exception {
         super.setUp();
 
-        queryer = (DefaultArchetypeSelectionQueryer) lookup(ArchetypeSelectionQueryer.ROLE);
+        queryer = (DefaultArchetypeSelectionQueryer) lookup(ArchetypeSelectionQueryer.class);
     }
 
     public void testDefaultArchetypeInMapOtherSelection() throws PrompterException {