[ARCHETYPE-560] Require Java 7
diff --git a/archetype-common/src/main/java/org/apache/maven/archetype/ArchetypeGenerationRequest.java b/archetype-common/src/main/java/org/apache/maven/archetype/ArchetypeGenerationRequest.java
index c3858cf..03e060f 100644
--- a/archetype-common/src/main/java/org/apache/maven/archetype/ArchetypeGenerationRequest.java
+++ b/archetype-common/src/main/java/org/apache/maven/archetype/ArchetypeGenerationRequest.java
@@ -70,6 +70,7 @@
      * 
      * @deprecated see ARCHETYPE-439
      */
+    @Deprecated
     private String archetypeRepository;
 
     // Archetype configuration
@@ -180,6 +181,7 @@
      * @return the URL of the archetype repository
      * @deprecated see ARCHETYPE-439
      */
+    @Deprecated
     public String getArchetypeRepository()
     {
         return archetypeRepository;
@@ -191,6 +193,7 @@
      * @return this request
      * @deprecated see ARCHETYPE-439
      */
+    @Deprecated
     public ArchetypeGenerationRequest setArchetypeRepository( String archetypeRepository )
     {
         this.archetypeRepository = archetypeRepository;
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 5ad3e78..f58c233 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
@@ -57,6 +57,7 @@
     @Requirement( role = ArchetypeDataSource.class )
     private Map<String, ArchetypeDataSource> archetypeSources;
 
+    @Override
     public ArchetypeCreationResult createArchetypeFromProject( ArchetypeCreationRequest request )
     {
         ArchetypeCreationResult result = new ArchetypeCreationResult();
@@ -66,6 +67,7 @@
         return result;
     }
 
+    @Override
     public ArchetypeGenerationResult generateProjectFromArchetype( ArchetypeGenerationRequest request )
     {
         ArchetypeGenerationResult result = new ArchetypeGenerationResult();
@@ -75,6 +77,7 @@
         return result;
     }
 
+    @Override
     public File archiveArchetype( File archetypeDirectory, File outputDirectory, String finalName )
         throws DependencyResolutionRequiredException, IOException
     {
@@ -93,20 +96,12 @@
             archive.getParentFile().mkdirs();
         }
 
-        ZipOutputStream zos = null;
-        try
+        try ( ZipOutputStream zos = new ZipOutputStream( new FileOutputStream( archive ) ) )
         {
-            zos = new ZipOutputStream( new FileOutputStream( archive ) );
-
             zos.setLevel( 9 );
 
             zipper( zos, sourceDirectory.getAbsolutePath().length(), sourceDirectory );
         }
-        finally
-        {
-            IOUtil.close( zos );
-        }
-
     }
 
     private void zipper( ZipOutputStream zos, int offset, File currentSourceDirectory )
@@ -146,17 +141,10 @@
 
                 zos.putNextEntry( e );
 
-                FileInputStream is = null;
-                try
+                try ( FileInputStream is = new FileInputStream( files[i] ) )
                 {
-                    is = new FileInputStream( files[i] );
-
                     IOUtil.copy( is, zos );
                 }
-                finally
-                {
-                    IOUtil.close( is );
-                }
 
                 zos.flush();
 
@@ -165,6 +153,7 @@
         }
     }
 
+    @Override
     public ArchetypeCatalog getInternalCatalog()
     {
         try
@@ -179,6 +168,7 @@
         }
     }
 
+    @Override
     public ArchetypeCatalog getLocalCatalog( ProjectBuildingRequest buildingRequest )
     {
         try
@@ -193,6 +183,7 @@
         }
     }
 
+    @Override
     public ArchetypeCatalog getRemoteCatalog( ProjectBuildingRequest buildingRequest )
     {
         try
@@ -207,6 +198,7 @@
         }
     }
 
+    @Override
     public void updateLocalCatalog( ProjectBuildingRequest buildingRequest, Archetype archetype )
     {
         try
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 3ba4435..9cbdbc6 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
@@ -33,7 +33,6 @@
 import org.codehaus.plexus.component.annotations.Component;
 import org.codehaus.plexus.component.annotations.Requirement;
 import org.codehaus.plexus.logging.AbstractLogEnabled;
-import org.codehaus.plexus.util.IOUtil;
 import org.codehaus.plexus.util.ReaderFactory;
 import org.codehaus.plexus.util.xml.pull.XmlPullParserException;
 
@@ -52,7 +51,6 @@
 import java.util.Map;
 import java.util.TreeMap;
 import java.util.zip.ZipEntry;
-import java.util.zip.ZipException;
 import java.util.zip.ZipFile;
 
 @Component( role = ArchetypeArtifactManager.class )
@@ -68,6 +66,7 @@
 
     private Map<String, File> archetypeCache = new TreeMap<String, File>();
 
+    @Override
     public File getArchetypeFile( final String groupId, final String artifactId, final String version,
                                   ArtifactRepository archetypeRepository, final ArtifactRepository localRepository,
                                   final List<ArtifactRepository> repositories, ProjectBuildingRequest buildingRequest )
@@ -97,6 +96,7 @@
         }
     }
 
+    @Override
     public ClassLoader getArchetypeJarLoader( File archetypeFile )
         throws UnknownArchetype
     {
@@ -114,19 +114,19 @@
         }
     }
 
+    @Override
     public Model getArchetypePom( File jar )
         throws XmlPullParserException, UnknownArchetype, IOException
     {
-        ZipFile zipFile = null;
-        try
+        
+        try ( ZipFile zipFile = getArchetypeZipFile( jar ) )
         {
             String pomFileName = null;
-            zipFile = getArchetypeZipFile( jar );
 
             Enumeration<? extends ZipEntry> enumeration = zipFile.entries();
             while ( enumeration.hasMoreElements() )
             {
-                ZipEntry el = (ZipEntry) enumeration.nextElement();
+                ZipEntry el = enumeration.nextElement();
 
                 String entry = el.getName();
                 if ( entry.startsWith( "META-INF" ) && entry.endsWith( "pom.xml" ) )
@@ -148,12 +148,9 @@
             }
             return pomManager.readPom( zipFile.getInputStream( pom ) );
         }
-        finally
-        {
-            closeZipFile( zipFile );
-        }
     }
 
+    @Override
     public ZipFile getArchetypeZipFile( File archetypeFile )
         throws UnknownArchetype
     {
@@ -161,46 +158,29 @@
         {
             return new ZipFile( archetypeFile );
         }
-        catch ( ZipException e )
-        {
-            throw new UnknownArchetype( e );
-        }
         catch ( IOException e )
         {
             throw new UnknownArchetype( e );
         }
     }
 
+    @Override
     public boolean isFileSetArchetype( File archetypeFile )
     {
-        ZipFile zipFile = null;
-        try
+        getLogger().debug( "checking fileset archetype status on " + archetypeFile );
+        
+        try ( ZipFile zipFile = getArchetypeZipFile( archetypeFile ) )
         {
-            getLogger().debug( "checking fileset archetype status on " + archetypeFile );
-
-            zipFile = getArchetypeZipFile( archetypeFile );
-
             return isFileSetArchetype( zipFile );
         }
-        catch ( IOException e )
+        catch ( IOException | UnknownArchetype e )
         {
             getLogger().debug( e.toString() );
             return false;
         }
-        catch ( UnknownArchetype e )
-        {
-            getLogger().debug( e.toString() );
-            return false;
-        }
-        finally
-        {
-            if ( zipFile != null )
-            {
-                closeZipFile( zipFile );
-            }
-        }
     }
 
+    @Override
     public boolean isFileSetArchetype( String groupId, String artifactId, String version,
                                        ArtifactRepository archetypeRepository, ArtifactRepository localRepository,
                                        List<ArtifactRepository> repositories, ProjectBuildingRequest buildingRequest )
@@ -219,36 +199,23 @@
         }
     }
 
+    @Override
     public boolean isOldArchetype( File archetypeFile )
     {
-        ZipFile zipFile = null;
-        try
+        getLogger().debug( "checking old archetype status on " + archetypeFile );
+
+        try ( ZipFile zipFile = getArchetypeZipFile( archetypeFile ) )
         {
-            getLogger().debug( "checking old archetype status on " + archetypeFile );
-
-            zipFile = getArchetypeZipFile( archetypeFile );
-
             return isOldArchetype( zipFile );
         }
-        catch ( IOException e )
+        catch ( IOException | UnknownArchetype e )
         {
             getLogger().debug( e.toString() );
             return false;
         }
-        catch ( UnknownArchetype e )
-        {
-            getLogger().debug( e.toString() );
-            return false;
-        }
-        finally
-        {
-            if ( zipFile != null )
-            {
-                closeZipFile( zipFile );
-            }
-        }
     }
 
+    @Override
     public boolean isOldArchetype( String groupId, String artifactId, String version,
                                    ArtifactRepository archetypeRepository, ArtifactRepository localRepository,
                                    List<ArtifactRepository> repositories, ProjectBuildingRequest buildingRequest )
@@ -267,6 +234,7 @@
         }
     }
 
+    @Override
     public boolean exists( String archetypeGroupId, String archetypeArtifactId, String archetypeVersion,
                            ArtifactRepository archetypeRepository, ArtifactRepository localRepository,
                            List<ArtifactRepository> remoteRepositories, ProjectBuildingRequest buildingRequest )
@@ -300,12 +268,11 @@
         }
     }
 
+    @Override
     public String getPostGenerationScript( File archetypeFile ) throws UnknownArchetype
     {
-        ZipFile zipFile = null;
-        try
+        try ( ZipFile zipFile = getArchetypeZipFile( archetypeFile ) )
         {
-            zipFile = getArchetypeZipFile( archetypeFile );
             Reader reader = getDescriptorReader( zipFile, Constants.ARCHETYPE_POST_GENERATION_SCRIPT );
             return reader == null ? null : IOUtils.toString( reader );
         }
@@ -313,36 +280,23 @@
         {
             throw new UnknownArchetype( e );
         }
-        finally
-        {
-            closeZipFile( zipFile );
-        }
     }
 
+    @Override
     public ArchetypeDescriptor getFileSetArchetypeDescriptor( File archetypeFile )
         throws UnknownArchetype
     {
-        ZipFile zipFile = null;
-        try
+        try ( ZipFile zipFile = getArchetypeZipFile( archetypeFile ) )
         {
-            zipFile = getArchetypeZipFile( archetypeFile );
-
             return loadFileSetArchetypeDescriptor( zipFile );
         }
-        catch ( XmlPullParserException e )
+        catch ( XmlPullParserException | IOException e )
         {
             throw new UnknownArchetype( e );
         }
-        catch ( IOException e )
-        {
-            throw new UnknownArchetype( e );
-        }
-        finally
-        {
-            closeZipFile( zipFile );
-        }
     }
 
+    @Override
     public org.apache.maven.archetype.metadata.ArchetypeDescriptor getFileSetArchetypeDescriptor( String groupId,
                                                                           String artifactId,
                                                                           String version,
@@ -358,21 +312,19 @@
         return getFileSetArchetypeDescriptor( archetypeFile );
     }
 
+    @Override
     public List<String> getFilesetArchetypeResources( File archetypeFile )
         throws UnknownArchetype
     {
         getLogger().debug( "getFilesetArchetypeResources( \"" + archetypeFile.getAbsolutePath() + "\" )" );
-        List<String> archetypeResources = new ArrayList<String>();
+        List<String> archetypeResources = new ArrayList<>();
 
-        ZipFile zipFile = null;
-        try
+        try ( ZipFile zipFile = getArchetypeZipFile( archetypeFile )  ) 
         {
-            zipFile = getArchetypeZipFile( archetypeFile );
-
             Enumeration<? extends ZipEntry> enumeration = zipFile.entries();
             while ( enumeration.hasMoreElements() )
             {
-                ZipEntry entry = (ZipEntry) enumeration.nextElement();
+                ZipEntry entry = enumeration.nextElement();
 
                 if ( entry.getName().startsWith( Constants.ARCHETYPE_RESOURCES ) )
                 {
@@ -389,36 +341,27 @@
             }
             return archetypeResources;
         }
-        finally
-        {
-            closeZipFile( zipFile );
-        }
-    }
-
-    public org.apache.maven.archetype.old.descriptor.ArchetypeDescriptor getOldArchetypeDescriptor( File archetypeFile )
-        throws UnknownArchetype
-    {
-        ZipFile zipFile = null;
-        try
-        {
-            zipFile = getArchetypeZipFile( archetypeFile );
-
-            return loadOldArchetypeDescriptor( zipFile );
-        }
-        catch ( XmlPullParserException e )
-        {
-            throw new UnknownArchetype( e );
-        }
         catch ( IOException e )
         {
             throw new UnknownArchetype( e );
         }
-        finally
+    }
+
+    @Override
+    public org.apache.maven.archetype.old.descriptor.ArchetypeDescriptor getOldArchetypeDescriptor( File archetypeFile )
+        throws UnknownArchetype
+    {
+        try ( ZipFile zipFile = getArchetypeZipFile( archetypeFile ) )
         {
-            closeZipFile( zipFile );
+            return loadOldArchetypeDescriptor( zipFile );
+        }
+        catch ( XmlPullParserException | IOException e )
+        {
+            throw new UnknownArchetype( e );
         }
     }
 
+    @Override
     public org.apache.maven.archetype.old.descriptor.ArchetypeDescriptor getOldArchetypeDescriptor( String groupId,
                                                                             String artifactId,
                                                                             String version,
@@ -460,43 +403,27 @@
     private boolean isFileSetArchetype( ZipFile zipFile )
         throws IOException
     {
-        Reader reader = null;
-        try
+        try ( Reader reader = getArchetypeDescriptorReader( zipFile ); )
         {
-            reader = getArchetypeDescriptorReader( zipFile );
-
             return ( reader != null );
         }
-        finally
-        {
-            IOUtil.close( reader );
-        }
     }
 
     private boolean isOldArchetype( ZipFile zipFile )
         throws IOException
     {
-        Reader reader = null;
-        try
+        try ( Reader reader = getOldArchetypeDescriptorReader( zipFile ) )
         {
-            reader = getOldArchetypeDescriptorReader( zipFile );
-
             return ( reader != null );
         }
-        finally
-        {
-            IOUtil.close( reader );
-        }
     }
 
     private org.apache.maven.archetype.metadata.ArchetypeDescriptor loadFileSetArchetypeDescriptor( ZipFile zipFile )
         throws IOException, XmlPullParserException
     {
-        Reader reader = null;
-        try
+        
+        try ( Reader reader = getArchetypeDescriptorReader( zipFile ) )
         {
-            reader = getArchetypeDescriptorReader( zipFile );
-
             if ( reader == null )
             {
                 return null;
@@ -505,28 +432,17 @@
             ArchetypeDescriptorXpp3Reader archetypeReader = new ArchetypeDescriptorXpp3Reader();
             return archetypeReader.read( reader, false );
         }
-        catch ( IOException e )
+        catch ( IOException | XmlPullParserException e )
         {
             throw e;
         }
-        catch ( XmlPullParserException e )
-        {
-            throw e;
-        }
-        finally
-        {
-            IOUtil.close( reader );
-        }
     }
 
     private org.apache.maven.archetype.old.descriptor.ArchetypeDescriptor loadOldArchetypeDescriptor( ZipFile zipFile )
         throws IOException, XmlPullParserException
     {
-        Reader reader = null;
-        try
+        try ( Reader reader = getOldArchetypeDescriptorReader( zipFile ) )
         {
-            reader = getOldArchetypeDescriptorReader( zipFile );
-
             if ( reader == null )
             {
                 return null;
@@ -535,18 +451,10 @@
             ArchetypeDescriptorBuilder builder = new ArchetypeDescriptorBuilder();
             return builder.build( reader );
         }
-        catch ( IOException ex )
+        catch ( IOException | XmlPullParserException  ex )
         {
             throw ex;
         }
-        catch ( XmlPullParserException ex )
-        {
-            throw ex;
-        }
-        finally
-        {
-            IOUtil.close( reader );
-        }
     }
 
     private Reader getArchetypeDescriptorReader( ZipFile zipFile )
@@ -595,7 +503,7 @@
         Enumeration<? extends ZipEntry> enu = zipFile.entries();
         while ( enu.hasMoreElements() )
         {
-            ZipEntry entryfound = (ZipEntry) enu.nextElement();
+            ZipEntry entryfound = enu.nextElement();
             getLogger().debug( "  - " + entryfound.getName() );
 
             if ( searchString.equals( entryfound.getName() ) )
@@ -607,15 +515,4 @@
         return null;
     }
 
-    private void closeZipFile( ZipFile zipFile )
-    {
-        try
-        {
-            zipFile.close();
-        }
-        catch ( Exception e )
-        {
-            getLogger().error( "Failed to close " + zipFile.getName() + " zipFile." );
-        }
-    }
 }
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 d84f9dd..8843d67 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
@@ -40,6 +40,7 @@
     extends AbstractLogEnabled
     implements ArchetypeFilesResolver
 {
+    @Override
     public List<String> getFilesWithExtension( List<String> files, String extension )
     {
         ListScanner scanner = new ListScanner();
@@ -51,6 +52,7 @@
         return scanner.scan( files );
     }
 
+    @Override
     public List<String> getFilteredFiles( List<String> files, String filtered )
     {
         ListScanner scanner = new ListScanner();
@@ -65,6 +67,7 @@
         return result;
     }
 
+    @Override
     public List<String> filterFiles( String moduleOffset, FileSet fileSet, List<String> archetypeResources )
     {
         ListScanner scanner = new ListScanner();
@@ -77,6 +80,7 @@
         return scanner.scan( archetypeResources );
     }
 
+    @Override
     public List<String> findOtherResources( int level, List<String> files, String languages )
     {
         ListScanner scanner = new ListScanner();
@@ -100,6 +104,7 @@
         return result;
     }
 
+    @Override
     public List<String> findOtherResources( int level, List<String> files, List<String> sourcesFiles, String languages )
     {
         ListScanner scanner = new ListScanner();
@@ -130,6 +135,7 @@
         return result;
     }
 
+    @Override
     public List<String> findOtherSources( int level, List<String> files, String languages )
     {
         ListScanner scanner = new ListScanner();
@@ -157,6 +163,7 @@
         return result;
     }
 
+    @Override
     public List<String> findResourcesMainFiles( List<String> files, String languages )
     {
         ListScanner scanner = new ListScanner();
@@ -171,6 +178,7 @@
         return result;
     }
 
+    @Override
     public List<String> findResourcesTestFiles( List<String> files, String languages )
     {
         ListScanner scanner = new ListScanner();
@@ -185,6 +193,7 @@
         return result;
     }
 
+    @Override
     public List<String> findSiteFiles( List<String> files, String languages )
     {
         ListScanner scanner = new ListScanner();
@@ -199,6 +208,7 @@
         return result;
     }
 
+    @Override
     public List<String> findSourcesMainFiles( List<String> files, String languages )
     {
         ListScanner scanner = new ListScanner();
@@ -212,6 +222,7 @@
         return result;
     }
 
+    @Override
     public List<String> findSourcesTestFiles( List<String> files, String languages )
     {
         ListScanner scanner = new ListScanner();
@@ -225,6 +236,7 @@
         return result;
     }
 
+    @Override
     public List<String> getPackagedFiles( List<String> files, String packageName )
     {
         List<String> packagedFiles = new ArrayList<String>();
@@ -239,6 +251,7 @@
         return packagedFiles;
     }
 
+    @Override
     public String resolvePackage( File basedir, List<String> languages )
         throws IOException
     {
@@ -249,6 +262,7 @@
         return resolvePackage( files );
     }
 
+    @Override
     public List<String> getUnpackagedFiles( List<String> files, String packageName )
     {
         List<String> unpackagedFiles = new ArrayList<String>();
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 262a38e..e4380cc 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
@@ -36,7 +36,6 @@
 import org.codehaus.plexus.component.annotations.Component;
 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.xml.pull.XmlPullParserException;
@@ -72,18 +71,16 @@
     extends AbstractLogEnabled
     implements PomManager
 {
+    @Override
     public void addModule( File pom, String artifactId )
         throws IOException, XmlPullParserException, DocumentException, InvalidPackaging
     {
         boolean found = false;
 
         StringWriter writer = new StringWriter();
-        Reader fileReader = null;
-
-        try
+        
+        try ( Reader fileReader = ReaderFactory.newXmlReader( pom ) )
         {
-            fileReader = ReaderFactory.newXmlReader( pom );
-
             SAXReader reader = new SAXReader();
             Document document = reader.read( fileReader );
             Element project = document.getRootElement();
@@ -150,12 +147,9 @@
                 FileUtils.fileWrite( pom.getAbsolutePath(), writer.toString() );
             } // end if
         }
-        finally
-        {
-            IOUtil.close( fileReader );
-        }
     }
 
+    @Override
     public void addParent( File pom, File parentPom )
         throws IOException, XmlPullParserException
     {
@@ -185,6 +179,7 @@
         writePom( generatedModel, pom, pom );
     }
 
+    @Override
     public void mergePoms( File pom, File temporaryPom )
         throws IOException, XmlPullParserException
     {
@@ -262,64 +257,43 @@
         writePom( model, pom, pom );
     }
 
+    @Override
     public Model readPom( final File pomFile )
         throws IOException, XmlPullParserException
     {
-        Model model;
-        Reader pomReader = null;
-        try
+        try ( Reader pomReader = ReaderFactory.newXmlReader( pomFile ) )
         {
-            pomReader = ReaderFactory.newXmlReader( pomFile );
-
             MavenXpp3Reader reader = new MavenXpp3Reader();
 
-            model = reader.read( pomReader );
+            return reader.read( pomReader );
         }
-        finally
-        {
-            IOUtil.close( pomReader );
-        }
-        return model;
     }
 
 
+    @Override
     public Model readPom( InputStream pomStream )
         throws IOException, XmlPullParserException
     {
-        Reader pomReader = ReaderFactory.newXmlReader( pomStream );
+        try ( Reader pomReader = ReaderFactory.newXmlReader( pomStream ) )
+        {
+            MavenXpp3Reader reader = new MavenXpp3Reader();
 
-        MavenXpp3Reader reader = new MavenXpp3Reader();
-
-        return reader.read( pomReader );
+            return reader.read( pomReader );
+        }
     }
 
+    @Override
     public void writePom( final Model model, final File pomFile, final File initialPomFile )
         throws IOException
     {
-        InputStream inputStream = null;
-        Writer outputStreamWriter = null;
-
         String fileEncoding =
             StringUtils.isEmpty( model.getModelEncoding() ) ? "UTF-8" : model.getModelEncoding();
 
-        try
+        org.jdom.Document doc;
+        try ( InputStream inputStream = new FileInputStream( initialPomFile ) )
         {
-            inputStream = new FileInputStream( initialPomFile );
-
             SAXBuilder builder = new SAXBuilder();
-            org.jdom.Document doc = builder.build( inputStream );
-            inputStream.close();
-            inputStream = null;
-
-            // The cdata parts of the pom are not preserved from initial to target
-            MavenJDOMWriter writer = new MavenJDOMWriter();
-
-            outputStreamWriter =
-                new OutputStreamWriter( new FileOutputStream( pomFile ), fileEncoding );
-
-            final String ls = System.getProperty( "line.separator" );
-            Format form = Format.getRawFormat().setEncoding( fileEncoding ).setLineSeparator( ls );
-            writer.write( model, doc, outputStreamWriter, form );
+            doc = builder.build( inputStream );
         }
         catch ( JDOMException exc )
         {
@@ -328,29 +302,25 @@
             ioe.initCause( exc );
             throw ioe;
         }
+        
+        try ( Writer outputStreamWriter = new OutputStreamWriter( new FileOutputStream( pomFile ), fileEncoding ) ) 
+        {
+            // The cdata parts of the pom are not preserved from initial to target
+            MavenJDOMWriter writer = new MavenJDOMWriter();
+
+            final String ls = System.lineSeparator();
+            Format form = Format.getRawFormat().setEncoding( fileEncoding ).setLineSeparator( ls );
+            writer.write( model, doc, outputStreamWriter, form );
+        }
         catch ( FileNotFoundException e )
         {
             getLogger().debug( "Creating pom file " + pomFile );
 
-            Writer pomWriter = null;
-
-            try
+            try ( Writer pomWriter = new OutputStreamWriter( new FileOutputStream( pomFile ), fileEncoding ) )
             {
-                pomWriter =
-                    new OutputStreamWriter( new FileOutputStream( pomFile ), fileEncoding );
-
                 MavenXpp3Writer writer = new MavenXpp3Writer();
                 writer.write( pomWriter, model );
             }
-            finally
-            {
-                IOUtil.close( pomWriter );
-            }
-        }
-        finally
-        {
-            IOUtil.close( inputStream );
-            IOUtil.close( outputStreamWriter );
         }
     }
 
@@ -380,11 +350,9 @@
 
     private void mergeProfiles( Model model, Model generatedModel )
     {
-        @SuppressWarnings( "unchecked" )
         List<Profile> generatedProfiles = generatedModel.getProfiles();
         if ( generatedProfiles != null && generatedProfiles.size() > 0 )
         {
-            @SuppressWarnings( "unchecked" )
             List<Profile> modelProfiles = model.getProfiles();
             Map<String, Profile> modelProfileIdMap = new HashMap<String, Profile>();
             if ( modelProfiles == null )
@@ -411,8 +379,8 @@
                 else
                 {
                     getLogger().warn( "Try to merge profiles with id " + generatedProfileId );
-                    mergeModelBase( (Profile) modelProfileIdMap.get( generatedProfileId ), generatedProfile );
-                    mergeProfileBuild( (Profile) modelProfileIdMap.get( generatedProfileId ), generatedProfile );
+                    mergeModelBase( modelProfileIdMap.get( generatedProfileId ), generatedProfile );
+                    mergeProfileBuild( modelProfileIdMap.get( generatedProfileId ), generatedProfile );
                 }
             }
         }
@@ -434,17 +402,15 @@
     private void mergeModelBase( ModelBase model, ModelBase generatedModel )
     {
         // ModelBase can be a Model or a Profile...
-
-        @SuppressWarnings( "unchecked" )
         Map<String, Dependency> dependenciesByIds = createDependencyMap( model.getDependencies() );
-        @SuppressWarnings( "unchecked" )
+
         Map<String, Dependency> generatedDependenciesByIds = createDependencyMap( generatedModel.getDependencies() );
 
         for ( String generatedDependencyId : generatedDependenciesByIds.keySet() )
         {
             if ( !dependenciesByIds.containsKey( generatedDependencyId ) )
             {
-                model.addDependency( (Dependency) generatedDependenciesByIds.get( generatedDependencyId ) );
+                model.addDependency( generatedDependenciesByIds.get( generatedDependencyId ) );
             }
             else
             {
@@ -467,9 +433,8 @@
                 model.setReporting( new Reporting() );
             }
 
-            @SuppressWarnings( "unchecked" )
             Map<String, ReportPlugin> reportPluginsByIds = model.getReporting().getReportPluginsAsMap();
-            @SuppressWarnings( "unchecked" )
+
             Map<String, ReportPlugin> generatedReportPluginsByIds =
                 generatedModel.getReporting().getReportPluginsAsMap();
 
@@ -489,9 +454,8 @@
 
     private void mergeBuildPlugins( BuildBase modelBuild, BuildBase generatedModelBuild )
     {
-        @SuppressWarnings( "unchecked" )
         Map<String, Plugin> pluginsByIds = modelBuild.getPluginsAsMap();
-        @SuppressWarnings( "unchecked" )
+
         List<Plugin> generatedPlugins = generatedModelBuild.getPlugins();
 
         for ( Plugin generatedPlugin : generatedPlugins )
@@ -505,7 +469,7 @@
             else
             {
                 getLogger().info( "Try to merge plugin configuration of plugins with id: " + generatedPluginsId );
-                Plugin modelPlugin = (Plugin) pluginsByIds.get( generatedPluginsId );
+                Plugin modelPlugin = pluginsByIds.get( generatedPluginsId );
 
                 modelPlugin.setConfiguration( Xpp3DomUtils.mergeXpp3Dom( (Xpp3Dom) generatedPlugin.getConfiguration(),
                                                                          (Xpp3Dom) modelPlugin.getConfiguration() ) );
diff --git a/archetype-common/src/main/java/org/apache/maven/archetype/common/MavenJDOMWriter.java b/archetype-common/src/main/java/org/apache/maven/archetype/common/MavenJDOMWriter.java
index 2fe0bf2..1ddbdfc 100644
--- a/archetype-common/src/main/java/org/apache/maven/archetype/common/MavenJDOMWriter.java
+++ b/archetype-common/src/main/java/org/apache/maven/archetype/common/MavenJDOMWriter.java
@@ -130,6 +130,7 @@
      * @param document
      * @deprecated
      */
+    @Deprecated
     public void write( Model project, Document document, OutputStream stream )
         throws java.io.IOException
     {
diff --git a/archetype-common/src/main/java/org/apache/maven/archetype/common/util/FileCharsetDetector.java b/archetype-common/src/main/java/org/apache/maven/archetype/common/util/FileCharsetDetector.java
index ab2e39a..8dfc043 100644
--- a/archetype-common/src/main/java/org/apache/maven/archetype/common/util/FileCharsetDetector.java
+++ b/archetype-common/src/main/java/org/apache/maven/archetype/common/util/FileCharsetDetector.java
@@ -48,6 +48,7 @@
 
         det.Init( new nsICharsetDetectionObserver()
         {
+            @Override
             @SuppressWarnings( "checkstyle:methodname" )
             public void Notify( String charset )
             {
@@ -56,11 +57,9 @@
             }
         } );
 
-        FileInputStream fileInputStream = new FileInputStream( detectedFile );
-        BufferedInputStream imp = new BufferedInputStream( fileInputStream );
-        try
+        try ( FileInputStream fileInputStream = new FileInputStream( detectedFile );
+              BufferedInputStream imp = new BufferedInputStream( fileInputStream ) )
         {
-
             byte[] buf = new byte[1024];
             int len;
             boolean done = false;
@@ -98,11 +97,6 @@
                 charset = "ASCII";
             }
         }
-        finally
-        {
-            imp.close();
-            fileInputStream.close();
-        }
     }
 
 
@@ -114,6 +108,7 @@
 
         det.Init( new nsICharsetDetectionObserver()
         {
+            @Override
             @SuppressWarnings( "checkstyle:methodname" )
             public void Notify( String charset )
             {
diff --git a/archetype-common/src/main/java/org/apache/maven/archetype/common/util/Format.java b/archetype-common/src/main/java/org/apache/maven/archetype/common/util/Format.java
index af75a09..18dce66 100644
--- a/archetype-common/src/main/java/org/apache/maven/archetype/common/util/Format.java
+++ b/archetype-common/src/main/java/org/apache/maven/archetype/common/util/Format.java
@@ -438,6 +438,7 @@
         return encoding;
     }
 
+    @Override
     protected Object clone()
     {
         Format format = null;
@@ -503,6 +504,7 @@
             }
         }
 
+        @Override
         public boolean shouldEscape( char ch )
         {
             if ( bits == 16 )
@@ -511,11 +513,11 @@
             }
             if ( bits == 8 )
             {
-                return ( (int) ch > 255 );
+                return ( ch > 255 );
             }
             if ( bits == 7 )
             {
-                return ( (int) ch > 127 );
+                return ( ch > 127 );
             }
             else
             {
@@ -639,6 +641,7 @@
             this.name = name;
         }
 
+        @Override
         public String toString()
         {
             return name;
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 142cbac..c0e02f8 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
@@ -106,7 +106,7 @@
      */
     public String pop()
     {
-        String prefix = (String) prefixes.pop();
+        String prefix = prefixes.pop();
         uris.pop();
 
         return prefix;
@@ -136,7 +136,7 @@
         {
             return null;
         }
-        String uri = (String) uris.elementAt( index );
+        String uri = uris.elementAt( index );
         return uri;
     }
 
@@ -145,6 +145,7 @@
      * most recently added <code>{@link Namespace}</code> to
      * the "oldest," all to <code>System.out</code>.
      */
+    @Override
     public String toString()
     {
         StringBuffer buf = new StringBuffer();
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 ff25994..fc7b79b 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
@@ -1708,6 +1708,7 @@
     }
 
     /** Returns a copy of this XMLOutputter. */
+    @Override
     public Object clone()
     {
         // Implementation notes: Since all state of an XMLOutputter is
@@ -1735,6 +1736,7 @@
      *
      * @return a string listing the settings for this XMLOutputter instance
      */
+    @Override
     public String toString()
     {
         StringBuffer buffer = new StringBuffer();
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 747d73e..86ffc22 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
@@ -101,6 +101,7 @@
     @Requirement
     private Invoker invoker;
 
+    @Override
     public void createArchetype( ArchetypeCreationRequest request, ArchetypeCreationResult result )
     {
         MavenProject project = request.getProject();
@@ -243,21 +244,15 @@
                         pomReversedProperties, preserveCData, keepParent );
             getLogger().debug( "Created Archetype " + archetypeDescriptor.getName() + " template pom(s)" );
 
-            Writer out = null;
-            try
+            
+            try ( Writer out = WriterFactory.newXmlWriter( archetypeDescriptorFile ) )
             {
-                out = WriterFactory.newXmlWriter( archetypeDescriptorFile );
-
                 ArchetypeDescriptorXpp3Writer writer = new ArchetypeDescriptorXpp3Writer();
 
                 writer.write( out, archetypeDescriptor );
 
                 getLogger().debug( "Archetype " + archetypeDescriptor.getName() + " descriptor written" );
             }
-            finally
-            {
-                IOUtil.close( out );
-            }
 
             createArchetypeBasicIt( archetypeDescriptor, outputDirectory );
 
@@ -332,13 +327,9 @@
         File basicItDirectory = new File( generatedSourcesDirectory, basic );
         basicItDirectory.mkdirs();
 
-        InputStream in = null;
-        OutputStream out = null;
-
-        try
+        try ( InputStream in = FilesetArchetypeCreator.class.getResourceAsStream( "archetype.properties" );
+              OutputStream out = new FileOutputStream( new File( basicItDirectory, "archetype.properties" ) ) )
         {
-            in = FilesetArchetypeCreator.class.getResourceAsStream( "archetype.properties" );
-
             Properties archetypeProperties = new Properties();
             archetypeProperties.load( in );
 
@@ -347,14 +338,9 @@
                 archetypeProperties.put( req.getKey(), req.getDefaultValue() );
             }
 
-            out = new FileOutputStream( new File( basicItDirectory, "archetype.properties" ) );
             archetypeProperties.store( out, null );
         }
-        finally
-        {
-            IOUtil.close( in );
-            IOUtil.close( out );
-        }
+
         copyResource( "goal.txt", new File( basicItDirectory, "goal.txt" ) );
 
         getLogger().debug( "Added basic integration test" );
@@ -475,21 +461,11 @@
     private void copyResource( String name, File destination )
         throws IOException
     {
-        InputStream in = null;
-        OutputStream out = null;
-
-        try
+        try ( InputStream in = FilesetArchetypeCreator.class.getResourceAsStream( name );
+              OutputStream out = new FileOutputStream( destination ) )
         {
-            in = FilesetArchetypeCreator.class.getResourceAsStream( name );
-            out = new FileOutputStream( destination );
-
             IOUtil.copy( in, out );
         }
-        finally
-        {
-            IOUtil.close( in );
-            IOUtil.close( out );
-        }
     }
 
     private void addRequiredProperties( ArchetypeDescriptor archetypeDescriptor, Properties properties )
@@ -835,9 +811,9 @@
         {
             DirectoryScanner scanner = new DirectoryScanner();
             scanner.setBasedir( basedir );
-            scanner.setIncludes( (String[]) concatenateToList( fileSet.getIncludes(), fileSet.getDirectory() ).toArray(
+            scanner.setIncludes( concatenateToList( fileSet.getIncludes(), fileSet.getDirectory() ).toArray(
                 new String[fileSet.getIncludes().size()] ) );
-            scanner.setExcludes( (String[]) addLists( fileSet.getExcludes(), excludePatterns ).toArray(
+            scanner.setExcludes( addLists( fileSet.getExcludes(), excludePatterns ).toArray(
                 new String[fileSet.getExcludes().size()] ) );
             scanner.addDefaultExcludes();
             getLogger().debug( "Using fileset " + fileSet );
@@ -874,27 +850,17 @@
 
             FileUtils.copyFile( initialPomFile, inputFile );
 
-            Reader in = null;
-            Writer out = null;
-            try
+            try ( Reader in = ReaderFactory.newXmlReader( inputFile );
+                  Writer out = WriterFactory.newXmlWriter( outputFile ) )
             {
-                in = ReaderFactory.newXmlReader( inputFile );
-
                 String initialcontent = IOUtil.toString( in );
 
                 String content = getReversedContent( initialcontent, pomReversedProperties );
 
                 outputFile.getParentFile().mkdirs();
 
-                out = WriterFactory.newXmlWriter( outputFile );
-
                 IOUtil.copy( content, out );
             }
-            finally
-            {
-                IOUtil.close( in );
-                IOUtil.close( out );
-            }
 
             inputFile.delete();
         }
@@ -919,10 +885,8 @@
             pomManager.writePom( pom, outputFile, initialPomFile );
         }
 
-        Reader in = null;
-        try
+        try ( Reader in = ReaderFactory.newXmlReader( initialPomFile ) )
         {
-            in = ReaderFactory.newXmlReader( initialPomFile );
             String initialcontent = IOUtil.toString( in );
 
             Iterator<?> properties = pomReversedProperties.keySet().iterator();
@@ -938,10 +902,6 @@
                 }
             }
         }
-        finally
-        {
-            IOUtil.close( in );
-        }
     }
 
     private FileSet createFileSet( final List<String> excludes, final boolean packaged, final boolean filtered,
@@ -1103,27 +1063,17 @@
 
             FileUtils.copyFile( initialPomFile, inputFile );
 
-            Reader in = null;
-            Writer out = null;
-            try
+            try ( Reader in = ReaderFactory.newXmlReader( inputFile );
+                  Writer out = WriterFactory.newXmlWriter( outputFile ) )
             {
-                in = ReaderFactory.newXmlReader( inputFile );
-
                 String initialcontent = IOUtil.toString( in );
 
                 String content = getReversedContent( initialcontent, pomReversedProperties );
 
                 outputFile.getParentFile().mkdirs();
 
-                out = WriterFactory.newXmlWriter( outputFile );
-
                 IOUtil.copy( content, out );
             }
-            finally
-            {
-                IOUtil.close( in );
-                IOUtil.close( out );
-            }
 
             inputFile.delete();
         }
@@ -1171,10 +1121,8 @@
             pomManager.writePom( pom, outputFile, initialPomFile );
         }
 
-        Reader in = null;
-        try
+        try ( Reader in = ReaderFactory.newXmlReader( initialPomFile ) )
         {
-            in = ReaderFactory.newXmlReader( initialPomFile );
             String initialcontent = IOUtil.toString( in );
 
             for ( Iterator<?> properties = pomReversedProperties.keySet().iterator(); properties.hasNext(); )
@@ -1189,10 +1137,6 @@
                 }
             }
         }
-        finally
-        {
-            IOUtil.close( in );
-        }
     }
 
     private Set<String> getExtensions( List<String> files )
@@ -1791,18 +1735,14 @@
 
     public String getArchetypeVersion()
     {
-        InputStream is = null;
-
         // This should actually come from the pom.properties at testing but it's not generated and put into the JAR, it
         // happens as part of the JAR plugin which is crap as it makes testing inconsistent.
         String version = "version";
 
-        try
+        try ( InputStream is = getClass().getClassLoader().getResourceAsStream( MAVEN_PROPERTIES ) )
         {
             Properties properties = new Properties();
 
-            is = getClass().getClassLoader().getResourceAsStream( MAVEN_PROPERTIES );
-
             if ( is != null )
             {
                 properties.load( is );
@@ -1821,9 +1761,5 @@
         {
             return version;
         }
-        finally
-        {
-            IOUtil.close( is );
-        }
     }
 }
diff --git a/archetype-common/src/main/java/org/apache/maven/archetype/downloader/DefaultDownloader.java b/archetype-common/src/main/java/org/apache/maven/archetype/downloader/DefaultDownloader.java
index 8cb6e5e..66e0ea5 100644
--- a/archetype-common/src/main/java/org/apache/maven/archetype/downloader/DefaultDownloader.java
+++ b/archetype-common/src/main/java/org/apache/maven/archetype/downloader/DefaultDownloader.java
@@ -42,6 +42,7 @@
     @Requirement
     private ArtifactResolver artifactResolver;
 
+    @Override
     public File download( String groupId, String artifactId, String version, ArtifactRepository archetypeRepository,
                           ArtifactRepository localRepository, List<ArtifactRepository> remoteRepositories,
                           ProjectBuildingRequest buildingRequest )
@@ -96,6 +97,7 @@
         return artifact.getFile();
     }
 
+    @Override
     public File downloadOld( String groupId, String artifactId, String version, ArtifactRepository archetypeRepository,
                              ArtifactRepository localRepository, List<ArtifactRepository> remoteRepositories,
                              ProjectBuildingRequest buildingRequest )
diff --git a/archetype-common/src/main/java/org/apache/maven/archetype/generator/DefaultArchetypeGenerator.java b/archetype-common/src/main/java/org/apache/maven/archetype/generator/DefaultArchetypeGenerator.java
index fba7e5e..3d47d45 100644
--- a/archetype-common/src/main/java/org/apache/maven/archetype/generator/DefaultArchetypeGenerator.java
+++ b/archetype-common/src/main/java/org/apache/maven/archetype/generator/DefaultArchetypeGenerator.java
@@ -141,6 +141,7 @@
         oldArchetype.createArchetype( request, archetypeFile );
     }
 
+    @Override
     public void generateArchetype( ArchetypeGenerationRequest request, File archetypeFile,
                                    ArchetypeGenerationResult result )
     {
@@ -166,6 +167,7 @@
         }
     }
 
+    @Override
     public void generateArchetype( ArchetypeGenerationRequest request, ArchetypeGenerationResult result )
     {
         try
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 2a5851c..2e8d203 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
@@ -93,6 +93,7 @@
      */
     private static final Pattern TOKEN_PATTERN = Pattern.compile( "__((?:[^_]+_)*[^_]+)__" );
 
+    @Override
     public void generateArchetype( ArchetypeGenerationRequest request, File archetypeFile )
         throws UnknownArchetype, ArchetypeNotConfigured, ProjectDirectoryExists, PomFileExists, OutputFileExists,
         ArchetypeGenerationFailure
@@ -299,23 +300,13 @@
         }
         else
         {
-            InputStream inputStream = null;
-            OutputStream out = null;
-            try
+            outFile.getParentFile().mkdirs();
+
+            try ( InputStream inputStream = archetypeZipFile.getInputStream( input );
+                  OutputStream out = new FileOutputStream( outFile ) )
             {
-                inputStream = archetypeZipFile.getInputStream( input );
-
-                outFile.getParentFile().mkdirs();
-
-                out = new FileOutputStream( outFile );
-
                 IOUtil.copy( inputStream, out );
             }
-            finally
-            {
-                IOUtil.close( inputStream );
-                IOUtil.close( out );
-            }
         }
 
         return true;
@@ -488,8 +479,7 @@
 
     private String evaluateExpression( Context context, String key, String value )
     {
-        StringWriter stringWriter = new StringWriter();
-        try
+        try ( StringWriter stringWriter = new StringWriter() )
         {
             Velocity.evaluate( context, stringWriter, key, value );
             return stringWriter.toString();
@@ -498,11 +488,6 @@
         {
             return value;
         }
-        finally
-        {
-            IOUtil.close( stringWriter );
-        }
-
     }
 
     private void processArchetypeTemplates( AbstractArchetypeDescriptor archetypeDescriptor,
@@ -730,16 +715,12 @@
 
         getLogger().debug( "Merging into " + outFile );
 
-        Writer writer = null;
-
-        try
+        try ( Writer writer = new OutputStreamWriter( new FileOutputStream( outFile ), encoding ) )
         {
             StringWriter stringWriter = new StringWriter();
 
             velocity.getEngine().mergeTemplate( templateFileName, encoding, context, stringWriter );
 
-            writer = new OutputStreamWriter( new FileOutputStream( outFile ), encoding );
-
             writer.write( StringUtils.unifyLineSeparators( stringWriter.toString() ) );
 
             writer.flush();
@@ -748,10 +729,6 @@
         {
             throw new ArchetypeGenerationFailure( "Error merging velocity templates: " + e.getMessage(), e );
         }
-        finally
-        {
-            IOUtil.close( writer );
-        }
 
         return true;
     }
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 5dca83e..bfc207b 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
@@ -62,6 +62,7 @@
 import java.io.Reader;
 import java.io.StringWriter;
 import java.io.Writer;
+import java.net.MalformedURLException;
 import java.net.URL;
 import java.net.URLClassLoader;
 import java.util.HashMap;
@@ -103,6 +104,7 @@
     // artifactId = maven-foo-archetype
     // version = latest
 
+    @Override
     public void createArchetype( ArchetypeGenerationRequest request, ArtifactRepository archetypeRepository )
         throws UnknownArchetype, ArchetypeNotFoundException, ArchetypeDescriptorException,
         ArchetypeTemplateProcessingException
@@ -121,6 +123,7 @@
         createArchetype( request, archetypeFile );
     }
 
+    @Override
     public void createArchetype( ArchetypeGenerationRequest request, File archetypeFile )
         throws ArchetypeDescriptorException, ArchetypeTemplateProcessingException
     {
@@ -170,43 +173,26 @@
 
         URLClassLoader archetypeJarLoader;
 
-        InputStream is = null;
-
+        URL[] urls;
         try
         {
-            URL[] urls = new URL[1];
+            urls = new URL[] {archetypeFile.toURL() };
+        }
+        catch ( MalformedURLException e )
+        {
+            throw new ArchetypeDescriptorException( e.getMessage() );
+        }
 
-            urls[0] = archetypeFile.toURL();
+        archetypeJarLoader = new URLClassLoader( urls );
 
-            archetypeJarLoader = new URLClassLoader( urls );
-
-            is = getStream( ARCHETYPE_DESCRIPTOR, archetypeJarLoader );
-
-            if ( is == null )
-            {
-                is = getStream( ARCHETYPE_OLD_DESCRIPTOR, archetypeJarLoader );
-            }
-
-            if ( is == null )
-            {
-                throw new ArchetypeDescriptorException( "The " + ARCHETYPE_DESCRIPTOR
-                                                        + " descriptor cannot be found." );
-            }
-
+        try ( InputStream is = getDescriptorInputStream( archetypeJarLoader ) )
+        {
             descriptor = builder.build( new XmlStreamReader( is ) );
         }
-        catch ( IOException e )
+        catch ( IOException | XmlPullParserException e )
         {
             throw new ArchetypeDescriptorException( "Error reading the " + ARCHETYPE_DESCRIPTOR + " descriptor.", e );
         }
-        catch ( XmlPullParserException e )
-        {
-            throw new ArchetypeDescriptorException( "Error reading the " + ARCHETYPE_DESCRIPTOR + " descriptor.", e );
-        }
-        finally
-        {
-            IOUtil.close( is );
-        }
 
         // ----------------------------------------------------------------------
         //
@@ -298,11 +284,8 @@
         {
             if ( parentPomFile.exists() )
             {
-                Reader fileReader = null;
-
-                try
+                try ( Reader fileReader = ReaderFactory.newXmlReader( parentPomFile ) )
                 {
-                    fileReader = ReaderFactory.newXmlReader( parentPomFile );
                     MavenXpp3Reader reader = new MavenXpp3Reader();
                     parentModel = reader.read( fileReader );
                     if ( !"pom".equals( parentModel.getPackaging() ) )
@@ -311,19 +294,10 @@
                             "Unable to add module to the current project as it is not of packaging type 'pom'" );
                     }
                 }
-                catch ( IOException e )
+                catch ( IOException | XmlPullParserException e )
                 {
                     throw new ArchetypeTemplateProcessingException( "Unable to read parent POM", e );
                 }
-                catch ( XmlPullParserException e )
-                {
-                    throw new ArchetypeTemplateProcessingException( "Unable to read parent POM", e );
-                }
-                finally
-                {
-                    IOUtil.close( fileReader );
-                }
-
                 parentModel.getModules().add( artifactId );
             }
         }
@@ -360,43 +334,28 @@
                 IOUtil.close( fileWriter );
             }
 */
-            Reader fileReader = null;
+            
             boolean added;
             StringWriter w = new StringWriter();
-            try
+            try ( Reader fileReader = ReaderFactory.newXmlReader( parentPomFile ) )
             {
-                fileReader = ReaderFactory.newXmlReader( parentPomFile );
                 added = addModuleToParentPom( artifactId, fileReader, w );
             }
-            catch ( IOException e )
+            catch ( IOException | DocumentException e )
             {
                 throw new ArchetypeTemplateProcessingException( "Unable to rewrite parent POM", e );
             }
-            catch ( DocumentException e )
-            {
-                throw new ArchetypeTemplateProcessingException( "Unable to rewrite parent POM", e );
-            }
-            finally
-            {
-                IOUtil.close( fileReader );
-            }
 
             if ( added )
             {
-                Writer out = null;
-                try
+                try ( Writer out = WriterFactory.newXmlWriter( parentPomFile ) )
                 {
-                    out = WriterFactory.newXmlWriter( parentPomFile );
                     IOUtil.copy( w.toString(), out );
                 }
                 catch ( IOException e )
                 {
                     throw new ArchetypeTemplateProcessingException( "Unable to rewrite parent POM", e );
                 }
-                finally
-                {
-                    IOUtil.close( out );
-                }
             }
         }
 
@@ -410,6 +369,24 @@
 
     }
 
+    private InputStream getDescriptorInputStream( ClassLoader archetypeJarLoader ) throws ArchetypeDescriptorException
+    {
+        InputStream is = getStream( ARCHETYPE_DESCRIPTOR, archetypeJarLoader );
+
+        if ( is == null )
+        {
+            is = getStream( ARCHETYPE_OLD_DESCRIPTOR, archetypeJarLoader );
+        }
+
+        if ( is == null )
+        {
+            throw new ArchetypeDescriptorException( "The " + ARCHETYPE_DESCRIPTOR
+                                                    + " descriptor cannot be found." );
+        }
+        
+        return is;
+    }
+
     static boolean addModuleToParentPom( String artifactId, Reader fileReader, Writer fileWriter )
         throws DocumentException, IOException, ArchetypeTemplateProcessingException
     {
@@ -490,27 +467,17 @@
         // ---------------------------------------------------------------------
 
         Model generatedModel;
-        Reader pomReader = null;
-        try
+        
+        try ( Reader pomReader = ReaderFactory.newXmlReader( pomFile ) )
         {
-            pomReader = ReaderFactory.newXmlReader( pomFile );
-
             MavenXpp3Reader reader = new MavenXpp3Reader();
 
             generatedModel = reader.read( pomReader );
         }
-        catch ( IOException e )
+        catch ( IOException | XmlPullParserException e )
         {
             throw new ArchetypeTemplateProcessingException( "Error reading POM", e );
         }
-        catch ( XmlPullParserException e )
-        {
-            throw new ArchetypeTemplateProcessingException( "Error reading POM", e );
-        }
-        finally
-        {
-            IOUtil.close( pomReader );
-        }
 
         if ( parentModel != null )
         {
@@ -528,11 +495,8 @@
             }
             generatedModel.setParent( parent );
 
-            Writer pomWriter = null;
-            try
+            try (  Writer pomWriter = WriterFactory.newXmlWriter( pomFile ) )
             {
-                pomWriter = WriterFactory.newXmlWriter( pomFile );
-
                 MavenXpp3Writer writer = new MavenXpp3Writer();
                 writer.write( pomWriter, generatedModel );
             }
@@ -540,10 +504,6 @@
             {
                 throw new ArchetypeTemplateProcessingException( "Error rewriting POM", e );
             }
-            finally
-            {
-                IOUtil.close( pomWriter );
-            }
         }
 
         // XXX: Following POM processing block may be a candidate for
@@ -841,8 +801,7 @@
 
         if ( descriptor.isFiltered() )
         {
-            Writer writer = null;
-            try
+            try ( Writer writer = new OutputStreamWriter( new FileOutputStream( f ), descriptor.getEncoding() ) )
             {
                 StringWriter stringWriter = new StringWriter();
 
@@ -850,8 +809,6 @@
 
                 velocity.getEngine().mergeTemplate( template, descriptor.getEncoding(), context, stringWriter );
 
-                writer = new OutputStreamWriter( new FileOutputStream( f ), descriptor.getEncoding() );
-
                 writer.write( StringUtils.unifyLineSeparators( stringWriter.toString() ) );
 
                 writer.flush();
@@ -860,33 +817,18 @@
             {
                 throw new ArchetypeTemplateProcessingException( "Error merging velocity templates", e );
             }
-            finally
-            {
-                IOUtil.close( writer );
-            }
         }
         else
         {
-            InputStream is = getStream( ARCHETYPE_RESOURCES + "/" + template, null );
-
-            OutputStream fos = null;
-
-            try
+            try ( InputStream is = getStream( ARCHETYPE_RESOURCES + "/" + template, null );
+                  OutputStream fos = new FileOutputStream( f ) )
             {
-                fos = new FileOutputStream( f );
-
                 IOUtil.copy( is, fos );
             }
             catch ( Exception e )
             {
                 throw new ArchetypeTemplateProcessingException( "Error copying file", e );
             }
-            finally
-            {
-                IOUtil.close( fos );
-
-                IOUtil.close( is );
-            }
         }
     }
 
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 77a87e0..1fd3f97 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
@@ -31,7 +31,6 @@
 import org.codehaus.plexus.component.annotations.Component;
 import org.codehaus.plexus.component.annotations.Requirement;
 import org.codehaus.plexus.logging.AbstractLogEnabled;
-import org.codehaus.plexus.util.IOUtil;
 import org.codehaus.plexus.util.StringUtils;
 import org.codehaus.plexus.util.WriterFactory;
 import org.codehaus.plexus.util.xml.pull.XmlPullParserException;
@@ -53,6 +52,7 @@
     @Requirement
     private ArchetypeArtifactManager archetypeArtifactManager;
 
+    @Override
     public ArchetypeCatalog crawl( File repository )
     {
         if ( !repository.isDirectory() )
@@ -149,14 +149,13 @@
         return catalog;
     }
 
+    @Override
     public boolean writeCatalog( ArchetypeCatalog archetypeCatalog, File archetypeCatalogFile )
     {
-        Writer fileWriter = null;
-        try
-        {
-            ArchetypeCatalogXpp3Writer catalogWriter = new ArchetypeCatalogXpp3Writer();
+        ArchetypeCatalogXpp3Writer catalogWriter = new ArchetypeCatalogXpp3Writer();
 
-            fileWriter = WriterFactory.newXmlWriter( archetypeCatalogFile );
+        try ( Writer fileWriter = WriterFactory.newXmlWriter( archetypeCatalogFile ) )
+        {
             catalogWriter.write( fileWriter, archetypeCatalog );
             return true;
         }
@@ -165,9 +164,5 @@
             getLogger().warn( "Catalog can not be writen to " + archetypeCatalogFile, ex );
             return false;
         }
-        finally
-        {
-            IOUtil.close( fileWriter );
-        }
     }
 }
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 27a49a7..7d75751 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
@@ -29,7 +29,6 @@
 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.IOUtil;
 import org.codehaus.plexus.util.WriterFactory;
 import org.codehaus.plexus.util.xml.pull.XmlPullParserException;
 
@@ -45,11 +44,8 @@
     protected void writeLocalCatalog( ArchetypeCatalog catalog, File catalogFile )
         throws ArchetypeDataSourceException
     {
-        Writer writer = null;
-        try
+        try ( Writer writer = WriterFactory.newXmlWriter( catalogFile ) )
         {
-            writer = WriterFactory.newXmlWriter( catalogFile );
-
             ArchetypeCatalogXpp3Writer catalogWriter = new ArchetypeCatalogXpp3Writer();
 
             catalogWriter.write( writer, catalog );
@@ -58,20 +54,16 @@
         {
             throw new ArchetypeDataSourceException( "Error writing archetype catalog.", e );
         }
-        finally
-        {
-            IOUtil.close( writer );
-        }
     }
 
     protected ArchetypeCatalog readCatalog( Reader reader )
         throws ArchetypeDataSourceException
     {
-        try
+        try ( Reader catReader = reader )
         {
             ArchetypeCatalogXpp3Reader catalogReader = new ArchetypeCatalogXpp3Reader();
 
-            return catalogReader.read( reader );
+            return catalogReader.read( catReader );
         }
         catch ( IOException e )
         {
@@ -81,9 +73,5 @@
         {
             throw new ArchetypeDataSourceException( "Error parsing archetype catalog.", e );
         }
-        finally
-        {
-            IOUtil.close( reader );
-        }
     }
 }
\ No newline at end of file
diff --git a/archetype-common/src/main/java/org/apache/maven/archetype/source/InternalCatalogArchetypeDataSource.java b/archetype-common/src/main/java/org/apache/maven/archetype/source/InternalCatalogArchetypeDataSource.java
index f7f617d..32f7973 100644
--- a/archetype-common/src/main/java/org/apache/maven/archetype/source/InternalCatalogArchetypeDataSource.java
+++ b/archetype-common/src/main/java/org/apache/maven/archetype/source/InternalCatalogArchetypeDataSource.java
@@ -37,6 +37,7 @@
     extends CatalogArchetypeDataSource
 {
 
+    @Override
     public ArchetypeCatalog getArchetypeCatalog( ProjectBuildingRequest buildingRequest )
         throws ArchetypeDataSourceException
     {
diff --git a/archetype-common/src/main/java/org/apache/maven/archetype/source/LocalCatalogArchetypeDataSource.java b/archetype-common/src/main/java/org/apache/maven/archetype/source/LocalCatalogArchetypeDataSource.java
index 5cbddf6..0b50371 100644
--- a/archetype-common/src/main/java/org/apache/maven/archetype/source/LocalCatalogArchetypeDataSource.java
+++ b/archetype-common/src/main/java/org/apache/maven/archetype/source/LocalCatalogArchetypeDataSource.java
@@ -40,6 +40,7 @@
     @Requirement
     private RepositoryManager repositoryManager;
 
+    @Override
     public void updateCatalog( ProjectBuildingRequest buildingRequest, Archetype archetype )
         throws ArchetypeDataSourceException
     {
@@ -100,6 +101,7 @@
         writeLocalCatalog( catalog, catalogFile );
     }
 
+    @Override
     public ArchetypeCatalog getArchetypeCatalog( ProjectBuildingRequest buildingRequest )
         throws ArchetypeDataSourceException
     {
diff --git a/archetype-common/src/main/java/org/apache/maven/archetype/source/RemoteCatalogArchetypeDataSource.java b/archetype-common/src/main/java/org/apache/maven/archetype/source/RemoteCatalogArchetypeDataSource.java
index c88dae9..6616eba 100644
--- a/archetype-common/src/main/java/org/apache/maven/archetype/source/RemoteCatalogArchetypeDataSource.java
+++ b/archetype-common/src/main/java/org/apache/maven/archetype/source/RemoteCatalogArchetypeDataSource.java
@@ -138,6 +138,7 @@
         }
     }
 
+    @Override
     public void updateCatalog( ProjectBuildingRequest buildingRequest, Archetype archetype )
         throws ArchetypeDataSourceException
     {
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 191c449..ecfba5c 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,15 +19,20 @@
  * under the License.
  */
 
+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.util.Properties;
+
 import org.apache.maven.archetype.ArchetypeGenerationRequest;
 import org.apache.maven.archetype.ArchetypeGenerationResult;
 import org.apache.maven.artifact.repository.ArtifactRepository;
 import org.apache.maven.artifact.repository.DefaultArtifactRepository;
 import org.apache.maven.artifact.repository.layout.DefaultRepositoryLayout;
-import org.apache.maven.model.Dependency;
 import org.apache.maven.model.Model;
-import org.apache.maven.model.Plugin;
-import org.apache.maven.model.ReportPlugin;
 import org.apache.maven.model.io.xpp3.MavenXpp3Reader;
 import org.apache.maven.plugin.testing.AbstractMojoTestCase;
 import org.apache.maven.project.DefaultProjectBuildingRequest;
@@ -39,14 +44,6 @@
 import org.codehaus.plexus.util.xml.pull.XmlPullParserException;
 import org.sonatype.aether.impl.internal.SimpleLocalRepositoryManager;
 
-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.util.Properties;
-
 public class DefaultArchetypeGeneratorTest
     extends AbstractMojoTestCase
 {
@@ -239,11 +236,11 @@
         assertEquals( "1.0-SNAPSHOT", model.getVersion() );
         assertTrue( model.getModules().isEmpty() );
         assertFalse( model.getDependencies().isEmpty() );
-        assertEquals( "1.0", ( (Dependency) model.getDependencies().get( 0 ) ).getVersion() );
+        assertEquals( "1.0", model.getDependencies().get( 0 ).getVersion() );
         assertFalse( model.getBuild().getPlugins().isEmpty() );
-        assertEquals( "1.0", ( (Plugin) model.getBuild().getPlugins().get( 0 ) ).getVersion() );
+        assertEquals( "1.0", model.getBuild().getPlugins().get( 0 ).getVersion() );
         assertFalse( model.getReporting().getPlugins().isEmpty() );
-        assertEquals( "1.0", ( (ReportPlugin) model.getReporting().getPlugins().get( 0 ) ).getVersion() );
+        assertEquals( "1.0", model.getReporting().getPlugins().get( 0 ).getVersion() );
     }
 
     public void testGenerateArchetypePartialOnParent()
@@ -516,6 +513,7 @@
 
     }
 
+    @Override
     protected void tearDown()
         throws Exception
     {
@@ -524,6 +522,7 @@
         outputDirectory = null;
     }
 
+    @Override
     protected void setUp()
         throws Exception
     {
@@ -640,16 +639,11 @@
         throws IOException, FileNotFoundException
     {
         Properties properties = new Properties();
-        InputStream in = new FileInputStream( propertyFile );
-        try
+        try ( InputStream in = new FileInputStream( propertyFile ) )
         {
             properties.load( in );
             return properties;
         }
-        finally
-        {
-            IOUtil.close( in );
-        }
     }
 
     private Properties loadProperties( final String template )
@@ -675,32 +669,15 @@
         return new File( outputDirectory, "/pom.xml.sample" );
     }
 
-    private File getPropertiesFile()
-    {
-        return new File( outputDirectory, "/archetype.properties" );
-    }
-
-    private File getPropertiesSampleFile()
-    {
-        return new File( outputDirectory, "/archetype.properties.sample" );
-    }
-
     private Model readPom( final File pomFile )
         throws IOException, XmlPullParserException
     {
-        Reader pomReader = null;
-        try
+        try ( Reader pomReader = ReaderFactory.newXmlReader( pomFile ) )
         {
-            pomReader = ReaderFactory.newXmlReader( pomFile );
-
             MavenXpp3Reader reader = new MavenXpp3Reader();
 
             return reader.read( pomReader );
         }
-        finally
-        {
-            IOUtil.close( pomReader );
-        }
     }
     
     private static class Archetype
diff --git a/archetype-common/src/test/java/org/apache/maven/archetype/old/ArchetypeTest.java b/archetype-common/src/test/java/org/apache/maven/archetype/old/ArchetypeTest.java
index fd4cfdd..391cccb 100644
--- a/archetype-common/src/test/java/org/apache/maven/archetype/old/ArchetypeTest.java
+++ b/archetype-common/src/test/java/org/apache/maven/archetype/old/ArchetypeTest.java
@@ -356,6 +356,7 @@
         }
     }
 
+    @Override
     protected void setUp()
         throws Exception
     {
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 c307f56..0e258f9 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
@@ -26,7 +26,6 @@
 import javax.xml.parsers.SAXParserFactory;
 
 import org.codehaus.plexus.PlexusTestCase;
-import org.codehaus.plexus.util.IOUtil;
 import org.xml.sax.InputSource;
 import org.xml.sax.SAXException;
 import org.xml.sax.SAXParseException;
@@ -51,26 +50,23 @@
                                "http://www.w3.org/2001/XMLSchema" );
         saxParser.setProperty( "http://java.sun.com/xml/jaxp/properties/schemaSource", archetypeXsd );
 
-        InputStream in = getClass().getResourceAsStream( "sample-archetype.xml" );
-        try
+        try ( InputStream in = getClass().getResourceAsStream( "sample-archetype.xml" ); )
         {
             saxParser.parse( new InputSource( in ), new Handler() );
         }
-        finally
-        {
-            IOUtil.close( in );
-        }
     }
 
     private static class Handler
         extends DefaultHandler
     {
+        @Override
         public void warning ( SAXParseException e )
             throws SAXException
         {
             throw e;
         }
 
+        @Override
         public void error ( SAXParseException e )
             throws SAXException
         {
diff --git a/archetype-common/src/test/java/org/apache/maven/archetype/source/LocalCatalogArchetypeDataSourceTest.java b/archetype-common/src/test/java/org/apache/maven/archetype/source/LocalCatalogArchetypeDataSourceTest.java
index 406c076..219ba29 100644
--- a/archetype-common/src/test/java/org/apache/maven/archetype/source/LocalCatalogArchetypeDataSourceTest.java
+++ b/archetype-common/src/test/java/org/apache/maven/archetype/source/LocalCatalogArchetypeDataSourceTest.java
@@ -21,7 +21,6 @@
 import java.io.FileWriter;
 import java.io.Writer;
 
-import org.apache.commons.io.IOUtils;
 import org.apache.maven.archetype.ArchetypeManager;
 import org.apache.maven.archetype.catalog.Archetype;
 import org.apache.maven.archetype.catalog.ArchetypeCatalog;
@@ -35,6 +34,7 @@
 public class LocalCatalogArchetypeDataSourceTest extends PlexusTestCase
 {
 
+    @Override
     protected void setUp()
                     throws Exception
     {
@@ -53,9 +53,10 @@
 
         File catalogFile = new File( catalogDirectory, "archetype-catalog.xml" );
         ArchetypeCatalogXpp3Writer catalogWriter = new ArchetypeCatalogXpp3Writer();
-        Writer writer = new FileWriter( catalogFile );
-        catalogWriter.write( writer, catalog );
-        IOUtils.closeQuietly( writer );
+        try ( Writer writer = new FileWriter( catalogFile ) )
+        {
+            catalogWriter.write( writer, catalog );
+        }
     }
     
     public void testLocalCatalog()
diff --git a/archetype-common/src/test/java/org/apache/maven/archetype/source/RemoteCatalogArchetypeDataSourceTest.java b/archetype-common/src/test/java/org/apache/maven/archetype/source/RemoteCatalogArchetypeDataSourceTest.java
index 95201fc..300da23 100644
--- a/archetype-common/src/test/java/org/apache/maven/archetype/source/RemoteCatalogArchetypeDataSourceTest.java
+++ b/archetype-common/src/test/java/org/apache/maven/archetype/source/RemoteCatalogArchetypeDataSourceTest.java
@@ -17,11 +17,10 @@
  *  under the License.
  */
 
-import java.io.File;
 import java.io.FileWriter;
+import java.io.File;
 import java.io.Writer;
 
-import org.apache.commons.io.IOUtils;
 import org.apache.maven.archetype.ArchetypeManager;
 import org.apache.maven.archetype.catalog.Archetype;
 import org.apache.maven.archetype.catalog.ArchetypeCatalog;
@@ -42,6 +41,7 @@
 
     int port;
 
+    @Override
     protected void setUp()
         throws Exception
     {
@@ -77,11 +77,13 @@
 
         File catalogFile = new File( catalogDirectory, "archetype-catalog.xml" );
         ArchetypeCatalogXpp3Writer catalogWriter = new ArchetypeCatalogXpp3Writer();
-        Writer writer = new FileWriter( catalogFile );
-        catalogWriter.write( writer, catalog );
-        IOUtils.closeQuietly( writer );
+        try ( Writer writer = new FileWriter( catalogFile ) )
+        {
+            catalogWriter.write( writer, catalog );
+        }
     }
 
+    @Override
     protected void tearDown()
         throws Exception
     {
diff --git a/archetype-common/src/test/java/org/apache/maven/archetype/test/ArchetypeGenerationTest.java b/archetype-common/src/test/java/org/apache/maven/archetype/test/ArchetypeGenerationTest.java
index 3d7f0b1..e610dfa 100644
--- a/archetype-common/src/test/java/org/apache/maven/archetype/test/ArchetypeGenerationTest.java
+++ b/archetype-common/src/test/java/org/apache/maven/archetype/test/ArchetypeGenerationTest.java
@@ -66,7 +66,7 @@
         // Here I am just grabbing a OldArchetype but in a UI you would take the OldArchetype objects and present
         // them to the user.
 
-        Archetype selection = (Archetype) catalog.getArchetypes().get( catalog.getArchetypes().size() - 1 );
+        Archetype selection = catalog.getArchetypes().get( catalog.getArchetypes().size() - 1 );
 
         System.err.println( "Selected OldArchetype = " + selection );
         // Now you will present a dialog, or whatever, and grab the following values.
diff --git a/archetype-testing/archetype-final/src/test/java/org/apache/maven/archetype/creator/DefaultArchetypeCreatorIT.java b/archetype-testing/archetype-final/src/test/java/org/apache/maven/archetype/creator/DefaultArchetypeCreatorIT.java
index 5009392..4ad9d2c 100644
--- a/archetype-testing/archetype-final/src/test/java/org/apache/maven/archetype/creator/DefaultArchetypeCreatorIT.java
+++ b/archetype-testing/archetype-final/src/test/java/org/apache/maven/archetype/creator/DefaultArchetypeCreatorIT.java
@@ -21,23 +21,19 @@
 
 import org.apache.maven.archetype.ArchetypeCreationRequest;
 import org.apache.maven.archetype.ArchetypeCreationResult;
-import org.apache.maven.archetype.ArchetypeManager;
 import org.apache.maven.archetype.common.Constants;
 import org.apache.maven.artifact.repository.DefaultArtifactRepository;
 import org.apache.maven.artifact.repository.layout.DefaultRepositoryLayout;
 import org.apache.maven.plugin.testing.AbstractMojoTestCase;
 import org.apache.maven.project.DefaultProjectBuildingRequest;
 import org.apache.maven.project.MavenProject;
-import org.apache.maven.project.MavenProjectBuilder;
 import org.apache.maven.project.ProjectBuilder;
 import org.apache.maven.project.ProjectBuildingRequest;
-import org.apache.maven.project.ProjectBuildingResult;
 //import org.apache.maven.project.MavenProjectBuildingResult;
 import org.apache.maven.repository.internal.MavenRepositorySystemSession;
 import org.codehaus.plexus.util.FileUtils;
 import org.codehaus.plexus.util.PropertyUtils;
 import org.codehaus.plexus.util.StringUtils;
-import org.junit.Ignore;
 import org.sonatype.aether.impl.internal.SimpleLocalRepositoryManager;
 
 import java.io.File;
@@ -448,12 +444,14 @@
         assertExists( getTemplateFile( project, "src/main/webapp/resources/__artifactId__/a.gif" ) );
     }
     
+    @Override
     protected void tearDown()
         throws Exception
     {
         super.tearDown();
     }
 
+    @Override
     protected void setUp()
         throws Exception
     {
diff --git a/archetype-testing/archetype-final/src/test/java/org/apache/maven/archetype/test/ArchetyperRoundtripIT.java b/archetype-testing/archetype-final/src/test/java/org/apache/maven/archetype/test/ArchetyperRoundtripIT.java
index e46afaf..23f6523 100644
--- a/archetype-testing/archetype-final/src/test/java/org/apache/maven/archetype/test/ArchetyperRoundtripIT.java
+++ b/archetype-testing/archetype-final/src/test/java/org/apache/maven/archetype/test/ArchetyperRoundtripIT.java
@@ -1,10 +1,5 @@
 package org.apache.maven.archetype.test;
 
-import java.io.File;
-import java.io.FileWriter;
-import java.io.Writer;
-import java.util.Properties;
-
 /*
  * Licensed to the Apache Software Foundation (ASF) under one
  * or more contributor license agreements.  See the NOTICE file
@@ -24,7 +19,11 @@
  * under the License.
  */
 
-import org.apache.commons.io.IOUtils;
+import java.io.File;
+import java.io.FileWriter;
+import java.io.Writer;
+import java.util.Properties;
+
 import org.apache.maven.archetype.ArchetypeCreationRequest;
 import org.apache.maven.archetype.ArchetypeCreationResult;
 import org.apache.maven.archetype.ArchetypeGenerationRequest;
@@ -171,9 +170,10 @@
         catalog.addArchetype( generatedArchetype );
 
         ArchetypeCatalogXpp3Writer catalogWriter = new ArchetypeCatalogXpp3Writer();
-        Writer writer = new FileWriter( catalogFile );
-        catalogWriter.write( writer, catalog );
-        IOUtils.closeQuietly( writer );
+        try ( Writer writer = new FileWriter( catalogFile ) )
+        {
+            catalogWriter.write( writer, catalog );
+        }
 
         // (6) create a project form the archetype we just created
         String outputDirectory = new File( getBasedir(),
@@ -226,6 +226,7 @@
 
     int port;
 
+    @Override
     public void setUp()
         throws Exception
     {
@@ -248,6 +249,7 @@
 
     }
 
+    @Override
     public void tearDown()
         throws Exception
     {
diff --git a/archetype-testing/archetype-final/src/test/java/org/apache/maven/archetype/test/ArchetyperRoundtripWithProxyIT.java b/archetype-testing/archetype-final/src/test/java/org/apache/maven/archetype/test/ArchetyperRoundtripWithProxyIT.java
index 73ee616..33d9d1b 100644
--- a/archetype-testing/archetype-final/src/test/java/org/apache/maven/archetype/test/ArchetyperRoundtripWithProxyIT.java
+++ b/archetype-testing/archetype-final/src/test/java/org/apache/maven/archetype/test/ArchetyperRoundtripWithProxyIT.java
@@ -26,7 +26,6 @@
  * under the License.
  */
 
-import org.apache.commons.io.IOUtils;
 import org.apache.maven.archetype.ArchetypeCreationRequest;
 import org.apache.maven.archetype.ArchetypeCreationResult;
 import org.apache.maven.archetype.ArchetypeGenerationRequest;
@@ -182,9 +181,10 @@
         catalog.addArchetype( generatedArchetype );
 
         ArchetypeCatalogXpp3Writer catalogWriter = new ArchetypeCatalogXpp3Writer();
-        Writer writer = new FileWriter( catalogFile );
-        catalogWriter.write( writer, catalog );
-        IOUtils.closeQuietly( writer );
+        try ( Writer writer = new FileWriter( catalogFile ) )
+        {
+            catalogWriter.write( writer, catalog );
+        }
 
         // (6) create a project form the archetype we just created
         String outputDirectory = new File( getBasedir(),
@@ -212,6 +212,7 @@
 
     }
 
+    @Override
     public void setUp()
         throws Exception
     {
@@ -245,6 +246,7 @@
 
     }
 
+    @Override
     public void tearDown()
         throws Exception
     {
diff --git a/archetype-testing/archetype-final/src/test/java/org/apache/maven/archetype/test/RoundtripMultiModuleIT.java b/archetype-testing/archetype-final/src/test/java/org/apache/maven/archetype/test/RoundtripMultiModuleIT.java
index d777518..8b5e416 100644
--- a/archetype-testing/archetype-final/src/test/java/org/apache/maven/archetype/test/RoundtripMultiModuleIT.java
+++ b/archetype-testing/archetype-final/src/test/java/org/apache/maven/archetype/test/RoundtripMultiModuleIT.java
@@ -1,13 +1,5 @@
 package org.apache.maven.archetype.test;
 
-import java.io.File;
-import java.io.FileOutputStream;
-import java.io.FileWriter;
-import java.io.OutputStream;
-import java.io.Writer;
-import java.util.Iterator;
-import java.util.Properties;
-
 /*
  * Licensed to the Apache Software Foundation (ASF) under one
  * or more contributor license agreements.  See the NOTICE file
@@ -27,7 +19,14 @@
  * under the License.
  */
 
-import org.apache.commons.io.IOUtils;
+import java.io.File;
+import java.io.FileOutputStream;
+import java.io.FileWriter;
+import java.io.OutputStream;
+import java.io.Writer;
+import java.util.Iterator;
+import java.util.Properties;
+
 import org.apache.maven.archetype.ArchetypeCreationRequest;
 import org.apache.maven.archetype.ArchetypeCreationResult;
 import org.apache.maven.archetype.ArchetypeGenerationRequest;
@@ -184,9 +183,10 @@
         catalog.addArchetype( generatedArchetype );
 
         ArchetypeCatalogXpp3Writer catalogWriter = new ArchetypeCatalogXpp3Writer();
-        Writer writer = new FileWriter( catalogFile );
-        catalogWriter.write( writer, catalog );
-        IOUtils.closeQuietly( writer );
+        try ( Writer writer = new FileWriter( catalogFile ) )
+        {
+            catalogWriter.write( writer, catalog );
+        }
 
         // (6) create a project form the archetype we just created
         String outputDirectory = new File( getBasedir(),
@@ -233,6 +233,7 @@
 
     int port;
 
+    @Override
     public void setUp()
         throws Exception
     {
@@ -256,6 +257,7 @@
 
     }
 
+    @Override
     public void tearDown()
         throws Exception
     {
diff --git a/archetype-testing/archetype-proxy/src/main/java/org/apache/maven/archetype/proxy/ProxyServlet.java b/archetype-testing/archetype-proxy/src/main/java/org/apache/maven/archetype/proxy/ProxyServlet.java
index 8388221..f50c3e9 100644
--- a/archetype-testing/archetype-proxy/src/main/java/org/apache/maven/archetype/proxy/ProxyServlet.java
+++ b/archetype-testing/archetype-proxy/src/main/java/org/apache/maven/archetype/proxy/ProxyServlet.java
@@ -72,6 +72,7 @@
     /* (non-Javadoc)
      * @see javax.servlet.Servlet#init(javax.servlet.ServletConfig)
      */
+    @Override
     public void init( ServletConfig config )
         throws ServletException
     {
@@ -82,6 +83,7 @@
     /* (non-Javadoc)
      * @see javax.servlet.Servlet#getServletConfig()
      */
+    @Override
     public ServletConfig getServletConfig()
     {
         return config;
@@ -90,6 +92,7 @@
     /* (non-Javadoc)
      * @see javax.servlet.Servlet#service(javax.servlet.ServletRequest, javax.servlet.ServletResponse)
      */
+    @Override
     @SuppressWarnings( "checkstyle:methodlength" )
     public void service( ServletRequest req, ServletResponse res )
         throws ServletException,
@@ -312,6 +315,7 @@
     /* (non-Javadoc)
      * @see javax.servlet.Servlet#getServletInfo()
      */
+    @Override
     public String getServletInfo()
     {
         return "Proxy Servlet";
@@ -320,6 +324,7 @@
     /* (non-Javadoc)
      * @see javax.servlet.Servlet#destroy()
      */
+    @Override
     public void destroy()
     {
     }
@@ -334,8 +339,7 @@
         throws ServletException, IOException
     {
         response.setContentType( "text/html;charset=UTF-8" );
-        PrintWriter out = response.getWriter();
-        try
+        try ( PrintWriter out = response.getWriter()  )
         {
         /* TODO output your page here
         out.println("<html>");
@@ -348,9 +352,5 @@
         out.println("</html>");
          */
         }
-        finally
-        {
-            out.close();
-        }
     }
 }
diff --git a/archetype-testing/archetype-proxy/src/main/java/org/apache/maven/archetype/proxy/RepositoryServlet.java b/archetype-testing/archetype-proxy/src/main/java/org/apache/maven/archetype/proxy/RepositoryServlet.java
index a612d63..747bdd0 100644
--- a/archetype-testing/archetype-proxy/src/main/java/org/apache/maven/archetype/proxy/RepositoryServlet.java
+++ b/archetype-testing/archetype-proxy/src/main/java/org/apache/maven/archetype/proxy/RepositoryServlet.java
@@ -53,6 +53,7 @@
      * (non-Javadoc)
      * @see javax.servlet.Servlet#init(javax.servlet.ServletConfig)
      */
+    @Override
     public void init( ServletConfig config )
         throws ServletException
     {
@@ -64,6 +65,7 @@
      * (non-Javadoc)
      * @see javax.servlet.Servlet#getServletConfig()
      */
+    @Override
     public ServletConfig getServletConfig()
     {
         return config;
@@ -73,6 +75,7 @@
      * (non-Javadoc)
      * @see javax.servlet.Servlet#service(javax.servlet.ServletRequest, javax.servlet.ServletResponse)
      */
+    @Override
     public void service( ServletRequest req, ServletResponse res )
         throws ServletException
     {
@@ -217,6 +220,7 @@
      * (non-Javadoc)
      * @see javax.servlet.Servlet#getServletInfo()
      */
+    @Override
     public String getServletInfo()
     {
         return "Repository Servlet";
@@ -226,6 +230,7 @@
      * (non-Javadoc)
      * @see javax.servlet.Servlet#destroy()
      */
+    @Override
     public void destroy()
     {
     }
@@ -240,8 +245,7 @@
         throws ServletException, IOException
     {
         response.setContentType( "text/html;charset=UTF-8" );
-        PrintWriter out = response.getWriter();
-        try
+        try ( PrintWriter out = response.getWriter() )
         {
             /*
              * TODO output your page here out.println("<html>"); out.println("<head>");
@@ -250,12 +254,9 @@
              * out.println("</body>"); out.println("</html>");
              */
         }
-        finally
-        {
-            out.close();
-        }
     }
 
+    @Override
     public String getServletName()
     {
         return "Repository Servlet";
diff --git a/archetype-testing/archetype-repository/src/main/java/org/apache/maven/archetype/repository/RepositoryServlet.java b/archetype-testing/archetype-repository/src/main/java/org/apache/maven/archetype/repository/RepositoryServlet.java
index 79c9f4f..a8c742c 100644
--- a/archetype-testing/archetype-repository/src/main/java/org/apache/maven/archetype/repository/RepositoryServlet.java
+++ b/archetype-testing/archetype-repository/src/main/java/org/apache/maven/archetype/repository/RepositoryServlet.java
@@ -58,15 +58,14 @@
         return new File( filePath );
     }
 
+    @Override
     public void doGet( HttpServletRequest request, HttpServletResponse response )
         throws ServletException
     {
         log( "Getting file" );
-        InputStream is = null;
-        try
+        
+        try ( InputStream is = new FileInputStream( getFile( request ) ) )
         {
-            is = new FileInputStream( getFile( request ) );
-
             IO.copy( is, response.getOutputStream() );
             response.setStatus( HttpServletResponse.SC_OK );
             log( "File sent" );
@@ -81,9 +80,5 @@
             response.setStatus( HttpServletResponse.SC_INTERNAL_SERVER_ERROR );
             log( "Cannot send file", iOException );
         }
-        finally
-        {
-            IO.close( is );
-        }
     }
 }
\ No newline at end of file
diff --git a/maven-archetype-plugin/pom.xml b/maven-archetype-plugin/pom.xml
index d3435ba..98cbaaf 100644
--- a/maven-archetype-plugin/pom.xml
+++ b/maven-archetype-plugin/pom.xml
@@ -233,6 +233,8 @@
                 <archetype-repo.proxy.url>${archetype-repo.proxy.url}</archetype-repo.proxy.url>
               </filterProperties>
               <properties>
+                <maven.compiler.source>${maven.compiler.source}</maven.compiler.source>
+                <maven.compiler.target>${maven.compiler.target}</maven.compiler.target>
                 <!-- e.g. ensure that Java7 picks up TLSv1.2 when connecting with Central -->
                 <https.protocols>${https.protocols}</https.protocols>
               </properties>
diff --git a/maven-archetype-plugin/src/it/projects/build-and-run-its/pom.xml b/maven-archetype-plugin/src/it/projects/build-and-run-its/pom.xml
index 4261595..c1c3b67 100644
--- a/maven-archetype-plugin/src/it/projects/build-and-run-its/pom.xml
+++ b/maven-archetype-plugin/src/it/projects/build-and-run-its/pom.xml
@@ -54,7 +54,9 @@
             <localRepositoryPath>${project.build.directory}/local-repo</localRepositoryPath>
             <ignoreEOLStyle>true</ignoreEOLStyle>
             <properties>
-               <!-- e.g. ensure that Java7 picks up TLSv1.2 when connecting with Central -->
+              <maven.compiler.source>${maven.compiler.source}</maven.compiler.source>
+              <maven.compiler.target>${maven.compiler.target}</maven.compiler.target>
+              <!-- e.g. ensure that Java7 picks up TLSv1.2 when connecting with Central -->
               <https.protocols>${https.protocols}</https.protocols>
             </properties>
           </configuration>
diff --git a/maven-archetype-plugin/src/it/projects/build-archetype/pom.xml b/maven-archetype-plugin/src/it/projects/build-archetype/pom.xml
index 37f7aef..10970b9 100644
--- a/maven-archetype-plugin/src/it/projects/build-archetype/pom.xml
+++ b/maven-archetype-plugin/src/it/projects/build-archetype/pom.xml
@@ -55,7 +55,9 @@
             <localRepositoryPath>${basedir}/target/local-repo</localRepositoryPath>
             <ignoreEOLStyle>true</ignoreEOLStyle>
             <properties>
-               <!-- e.g. ensure that Java7 picks up TLSv1.2 when connecting with Central -->
+              <maven.compiler.source>${maven.compiler.source}</maven.compiler.source>
+              <maven.compiler.target>${maven.compiler.target}</maven.compiler.target>
+              <!-- e.g. ensure that Java7 picks up TLSv1.2 when connecting with Central -->
               <https.protocols>${https.protocols}</https.protocols>
             </properties>
           </configuration>
diff --git a/maven-archetype-plugin/src/it/projects/build-ignore-eol/pom.xml b/maven-archetype-plugin/src/it/projects/build-ignore-eol/pom.xml
index ae35464..004fb4d 100644
--- a/maven-archetype-plugin/src/it/projects/build-ignore-eol/pom.xml
+++ b/maven-archetype-plugin/src/it/projects/build-ignore-eol/pom.xml
@@ -57,7 +57,9 @@
             <settingsFile>${basedir}/test-settings.xml</settingsFile>
             <localRepositoryPath>${basedir}/target/local-repo</localRepositoryPath>
             <properties>
-               <!-- e.g. ensure that Java7 picks up TLSv1.2 when connecting with Central -->
+              <maven.compiler.source>${maven.compiler.source}</maven.compiler.source>
+              <maven.compiler.target>${maven.compiler.target}</maven.compiler.target>
+              <!-- e.g. ensure that Java7 picks up TLSv1.2 when connecting with Central -->
               <https.protocols>${https.protocols}</https.protocols>
             </properties>
           </configuration>
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 958c0cd..0ce77d5 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
@@ -54,6 +54,7 @@
     @Parameter( property = "repository", defaultValue = "${settings.localRepository}" )
     private File repository;
 
+    @Override
     public void execute()
         throws MojoExecutionException, MojoFailureException
     {
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 e3e6cf0..2b0f21a 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
@@ -228,6 +228,7 @@
 //    @Parameter( defaultValue = "${session.settings}", readonly = true, required = true )
 //    private File settingsXml;
 
+    @Override
     public void execute()
         throws MojoExecutionException, MojoFailureException
     {
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 a00911f..14007c8 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
@@ -163,6 +163,7 @@
     @Parameter( property = "filter" )
     private String filter;
 
+    @Override
     public void execute()
         throws MojoExecutionException, MojoFailureException
     {
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 32e9815..4d5e2ab 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
@@ -22,7 +22,6 @@
 import java.io.BufferedReader;
 import java.io.File;
 import java.io.FileInputStream;
-import java.io.FileNotFoundException;
 import java.io.FileReader;
 import java.io.IOException;
 import java.io.InputStream;
@@ -278,6 +277,7 @@
     @Parameter
     private Map<String, String> properties = new HashMap<String, String>();
 
+    @Override
     public void execute()
         throws MojoExecutionException, MojoFailureException
     {
@@ -432,13 +432,10 @@
         }
 
         getLog().debug( "Comparing files with EOL style ignored." );
-        BufferedReader referenceFileReader = null;
-        BufferedReader actualFileReader = null;
-        try
+        
+        try ( BufferedReader referenceFileReader = new BufferedReader( new FileReader( referenceFile ) ); 
+              BufferedReader actualFileReader = new BufferedReader( new FileReader( actualFile ) ) )
         {
-            referenceFileReader = new BufferedReader( new FileReader( referenceFile ) );
-            actualFileReader = new BufferedReader( new FileReader( actualFile ) );
-
             String refLine = null;
             String actualLine = null;
 
@@ -455,29 +452,17 @@
 
             return true;
         }
-        finally
-        {
-            IOUtil.close( referenceFileReader );
-            IOUtil.close( actualFileReader );
-        }
     }
 
     private Properties loadProperties( final File propertiesFile )
-        throws IOException, FileNotFoundException
+        throws IOException
     {
         Properties properties = new Properties();
 
-        InputStream in = null;
-        try
+        try ( InputStream in = new FileInputStream( propertiesFile ) )
         {
-            in = new FileInputStream( propertiesFile );
-
             properties.load( in );
         }
-        finally
-        {
-            IOUtil.close( in );
-        }
 
         return properties;
     }
@@ -819,32 +804,23 @@
         {
             String xml;
 
-            Reader reader = null;
-            try
+            // interpolation with token @...@
+            Map<String, Object> composite = getInterpolationValueSource();
+
+            try ( Reader xmlStreamReader = ReaderFactory.newXmlReader( originalFile );
+                  Reader reader = new InterpolationFilterReader( xmlStreamReader, composite, "@", "@" ) )
             {
-                // interpolation with token @...@
-                Map<String, Object> composite = getInterpolationValueSource();
-                reader = ReaderFactory.newXmlReader( originalFile );
-                reader = new InterpolationFilterReader( reader, composite, "@", "@" );
                 xml = IOUtil.toString( reader );
             }
-            finally
-            {
-                IOUtil.close( reader );
-            }
 
-            Writer writer = null;
-            try
+            
+            try ( Writer writer = WriterFactory.newXmlWriter( interpolatedFile ) )
             {
                 interpolatedFile.getParentFile().mkdirs();
-                writer = WriterFactory.newXmlWriter( interpolatedFile );
+                
                 writer.write( xml );
                 writer.flush();
             }
-            finally
-            {
-                IOUtil.close( writer );
-            }
         }
         catch ( IOException e )
         {
@@ -889,6 +865,7 @@
          *
          * @see java.util.Map#clear()
          */
+        @Override
         public void clear()
         {
             // nothing here
@@ -899,6 +876,7 @@
          *
          * @see java.util.Map#containsKey(java.lang.Object)
          */
+        @Override
         public boolean containsKey( Object key )
         {
             if ( !( key instanceof String ) )
@@ -931,6 +909,7 @@
          *
          * @see java.util.Map#containsValue(java.lang.Object)
          */
+        @Override
         public boolean containsValue( Object value )
         {
             throw new UnsupportedOperationException();
@@ -941,6 +920,7 @@
          *
          * @see java.util.Map#entrySet()
          */
+        @Override
         public Set<Entry<String, Object>> entrySet()
         {
             throw new UnsupportedOperationException();
@@ -951,6 +931,7 @@
          *
          * @see java.util.Map#get(java.lang.Object)
          */
+        @Override
         public Object get( Object key )
         {
             if ( !( key instanceof String ) )
@@ -986,6 +967,7 @@
          *
          * @see java.util.Map#isEmpty()
          */
+        @Override
         public boolean isEmpty()
         {
             return this.mavenProject == null && this.mavenProject.getProperties().isEmpty()
@@ -997,6 +979,7 @@
          *
          * @see java.util.Map#keySet()
          */
+        @Override
         public Set<String> keySet()
         {
             throw new UnsupportedOperationException();
@@ -1007,6 +990,7 @@
          *
          * @see java.util.Map#put(java.lang.Object, java.lang.Object)
          */
+        @Override
         public Object put( String key, Object value )
         {
             throw new UnsupportedOperationException();
@@ -1017,6 +1001,7 @@
          *
          * @see java.util.Map#putAll(java.util.Map)
          */
+        @Override
         public void putAll( Map<? extends String, ? extends Object> t )
         {
             throw new UnsupportedOperationException();
@@ -1027,6 +1012,7 @@
          *
          * @see java.util.Map#remove(java.lang.Object)
          */
+        @Override
         public Object remove( Object key )
         {
             throw new UnsupportedOperationException();
@@ -1037,6 +1023,7 @@
          *
          * @see java.util.Map#size()
          */
+        @Override
         public int size()
         {
             throw new UnsupportedOperationException();
@@ -1047,6 +1034,7 @@
          *
          * @see java.util.Map#values()
          */
+        @Override
         public Collection<Object> values()
         {
             throw new UnsupportedOperationException();
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 82429ae..c40e93a 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
@@ -82,6 +82,7 @@
     @Component
     private ArchetypeArtifactManager archetypeArtifactManager;
 
+    @Override
     public void execute()
         throws MojoExecutionException, MojoFailureException
     {
diff --git a/maven-archetype-plugin/src/main/java/org/apache/maven/archetype/mojos/UpdateLocalCatalogMojo.java b/maven-archetype-plugin/src/main/java/org/apache/maven/archetype/mojos/UpdateLocalCatalogMojo.java
index 014f108..767d30d 100644
--- a/maven-archetype-plugin/src/main/java/org/apache/maven/archetype/mojos/UpdateLocalCatalogMojo.java
+++ b/maven-archetype-plugin/src/main/java/org/apache/maven/archetype/mojos/UpdateLocalCatalogMojo.java
@@ -52,6 +52,7 @@
     @Parameter( defaultValue = "${project}", readonly = true, required = true )
     private MavenProject project;
 
+    @Override
     public void execute()
         throws MojoExecutionException
     {
diff --git a/maven-archetype-plugin/src/main/java/org/apache/maven/archetype/ui/ArchetypePrompter.java b/maven-archetype-plugin/src/main/java/org/apache/maven/archetype/ui/ArchetypePrompter.java
index 368453c..b014fb6 100644
--- a/maven-archetype-plugin/src/main/java/org/apache/maven/archetype/ui/ArchetypePrompter.java
+++ b/maven-archetype-plugin/src/main/java/org/apache/maven/archetype/ui/ArchetypePrompter.java
@@ -44,6 +44,7 @@
     @Requirement
     private InputHandler inputHandler;
 
+    @Override
     public String prompt( String message )
         throws PrompterException
     {
@@ -52,6 +53,7 @@
         return readLine();
     }
 
+    @Override
     public String prompt( String message, String defaultReply )
         throws PrompterException
     {
@@ -67,6 +69,7 @@
         return line;
     }
 
+    @Override
     @SuppressWarnings( { "rawtypes", "unchecked" } )
     public String prompt( String message, List possibleValues, String defaultReply )
         throws PrompterException
@@ -103,6 +106,7 @@
         return line;
     }
 
+    @Override
     @SuppressWarnings( "rawtypes" )
     public String prompt( String message, List possibleValues )
         throws PrompterException
@@ -110,6 +114,7 @@
         return prompt( message, possibleValues, null );
     }
 
+    @Override
     public String promptForPassword( String message )
         throws PrompterException
     {
@@ -163,6 +168,7 @@
         }
     }
 
+    @Override
     public void showMessage( String message )
         throws PrompterException
     {
diff --git a/maven-archetype-plugin/src/main/java/org/apache/maven/archetype/ui/DefaultArchetypeFactory.java b/maven-archetype-plugin/src/main/java/org/apache/maven/archetype/ui/DefaultArchetypeFactory.java
index 98f6bb9..4d5629b 100644
--- a/maven-archetype-plugin/src/main/java/org/apache/maven/archetype/ui/DefaultArchetypeFactory.java
+++ b/maven-archetype-plugin/src/main/java/org/apache/maven/archetype/ui/DefaultArchetypeFactory.java
@@ -33,6 +33,7 @@
     extends AbstractLogEnabled
     implements ArchetypeFactory
 {
+    @Override
     public ArchetypeDefinition createArchetypeDefinition( Properties properties )
     {
         ArchetypeDefinition definition = new ArchetypeDefinition();
@@ -78,6 +79,7 @@
         getLogger().debug( "Setting property " + key + "=" + configuration.getProperty( key ) );
     }
 
+    @Override
     @SuppressWarnings( "checkstyle:linelength" )
     public ArchetypeConfiguration createArchetypeConfiguration( org.apache.maven.archetype.old.descriptor.ArchetypeDescriptor archetypeDescriptor,
                                                                 Properties properties )
@@ -109,6 +111,7 @@
         }
     }
 
+    @Override
     @SuppressWarnings( "checkstyle:linelength" )
     public ArchetypeConfiguration createArchetypeConfiguration( org.apache.maven.archetype.metadata.ArchetypeDescriptor archetypeDescriptor,
                                                                 Properties properties )
@@ -204,6 +207,7 @@
         }
     }
 
+    @Override
     public ArchetypeConfiguration createArchetypeConfiguration( MavenProject project,
                                                                 ArchetypeDefinition archetypeDefinition,
                                                                 Properties properties )
@@ -265,6 +269,7 @@
         return configuration;
     }
 
+    @Override
     public void updateArchetypeConfiguration( ArchetypeConfiguration archetypeConfiguration,
                                               ArchetypeDefinition archetypeDefinition )
     {
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 9926b7e..745e7a5 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
@@ -43,7 +43,6 @@
 import org.codehaus.plexus.component.annotations.Requirement;
 import org.codehaus.plexus.components.interactivity.PrompterException;
 import org.codehaus.plexus.logging.AbstractLogEnabled;
-import org.codehaus.plexus.util.IOUtil;
 import org.codehaus.plexus.util.StringUtils;
 
 @Component( role = ArchetypeCreationConfigurator.class, hint = "default" )
@@ -60,6 +59,7 @@
     @Requirement
     private ArchetypeFilesResolver archetypeFilesResolver;
 
+    @Override
     public Properties configureArchetypeCreation( MavenProject project, Boolean interactiveMode,
                                                   Properties commandLineProperties, File propertyFile,
                                                   List<String> languages )
@@ -279,18 +279,12 @@
     {
         getLogger().debug( "Reading property file " + propertyFile );
 
-        InputStream is = new FileInputStream( propertyFile );
-
-        try
+        try ( InputStream is = new FileInputStream( propertyFile ) ) 
         {
             properties.load( is );
 
             getLogger().debug( "Read " + properties.size() + " properties" );
         }
-        finally
-        {
-            IOUtil.close( is );
-        }
     }
 
     public void writeProperties( Properties properties, File propertyFile )
@@ -315,18 +309,12 @@
             storedProperties.setProperty( propertyKey, properties.getProperty( propertyKey ) );
         }
 
-        OutputStream os = new FileOutputStream( propertyFile );
-
-        try
+        try ( OutputStream os = new FileOutputStream( propertyFile ) )
         {
             storedProperties.store( os, "" );
 
             getLogger().debug( "Stored " + storedProperties.size() + " properties" );
         }
-        finally
-        {
-            IOUtil.close( os );
-        }
     }
 
     private Properties initialiseArchetypeProperties( Properties commandLineProperties, File propertyFile )
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 e765fbb..3bdcfc0 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
@@ -37,30 +37,35 @@
     @Requirement
     private Prompter prompter;
 
+    @Override
     public String getArchetypeArtifactId( String defaultValue )
         throws PrompterException
     {
         return getValue( Constants.ARCHETYPE_ARTIFACT_ID, defaultValue );
     }
 
+    @Override
     public String getArchetypeGroupId( String defaultValue )
         throws PrompterException
     {
         return getValue( Constants.ARCHETYPE_GROUP_ID, defaultValue );
     }
 
+    @Override
     public String getArchetypeVersion( String defaultValue )
         throws PrompterException
     {
         return getValue( Constants.ARCHETYPE_VERSION, defaultValue );
     }
 
+    @Override
     public String getArtifactId( String defaultValue )
         throws PrompterException
     {
         return getValue( Constants.ARTIFACT_ID, defaultValue );
     }
 
+    @Override
     public boolean askAddAnotherProperty()
         throws PrompterException
     {
@@ -71,6 +76,7 @@
         return "Y".equalsIgnoreCase( answer );
     }
 
+    @Override
     public String askNewPropertyKey()
         throws PrompterException
     {
@@ -81,12 +87,14 @@
         return answer;
     }
 
+    @Override
     public String askReplacementValue( String propertyKey, String defaultValue )
         throws PrompterException
     {
         return getValue( propertyKey, defaultValue );
     }
 
+    @Override
     public boolean confirmConfiguration( ArchetypeConfiguration archetypeConfiguration )
         throws PrompterException
     {
@@ -108,18 +116,21 @@
         return "Y".equalsIgnoreCase( answer );
     }
 
+    @Override
     public String getGroupId( String defaultValue )
         throws PrompterException
     {
         return getValue( Constants.GROUP_ID, defaultValue );
     }
 
+    @Override
     public String getPackage( String defaultValue )
         throws PrompterException
     {
         return getValue( Constants.PACKAGE, defaultValue );
     }
 
+    @Override
     public String getVersion( String defaultValue )
         throws PrompterException
     {
diff --git a/maven-archetype-plugin/src/main/java/org/apache/maven/archetype/ui/generation/DefaultArchetypeGenerationConfigurator.java b/maven-archetype-plugin/src/main/java/org/apache/maven/archetype/ui/generation/DefaultArchetypeGenerationConfigurator.java
index 7abd59f..2de9bb1 100644
--- a/maven-archetype-plugin/src/main/java/org/apache/maven/archetype/ui/generation/DefaultArchetypeGenerationConfigurator.java
+++ b/maven-archetype-plugin/src/main/java/org/apache/maven/archetype/ui/generation/DefaultArchetypeGenerationConfigurator.java
@@ -41,7 +41,6 @@
 import org.codehaus.plexus.component.annotations.Requirement;
 import org.codehaus.plexus.components.interactivity.PrompterException;
 import org.codehaus.plexus.logging.AbstractLogEnabled;
-import org.codehaus.plexus.util.IOUtil;
 import org.codehaus.plexus.util.StringUtils;
 
 import java.io.IOException;
@@ -81,6 +80,7 @@
         this.archetypeArtifactManager = archetypeArtifactManager;
     }
 
+    @Override
     public void configureArchetype( ArchetypeGenerationRequest request, Boolean interactiveMode,
                                     Properties executionProperties )
         throws ArchetypeNotDefined, UnknownArchetype, ArchetypeNotConfigured, IOException, PrompterException,
@@ -340,8 +340,8 @@
 
     private String evaluateProperty( Context context, String property, String value )
     {
-        StringWriter stringWriter = new StringWriter();
-        try
+        
+        try ( StringWriter stringWriter = new StringWriter() )
         {
             Velocity.evaluate( context, stringWriter, property, value );
             return stringWriter.toString();
@@ -350,10 +350,6 @@
         {
             return value;
         }
-        finally
-        {
-            IOUtil.close( stringWriter );
-        }
     }
 
 
@@ -382,6 +378,7 @@
             this.archetypeConfiguration = archetypeConfiguration;
         }
 
+        @Override
         public int compare( String left, String right )
         {
             String leftDefault = archetypeConfiguration.getDefaultValue( left );
diff --git a/maven-archetype-plugin/src/main/java/org/apache/maven/archetype/ui/generation/DefaultArchetypeGenerationQueryer.java b/maven-archetype-plugin/src/main/java/org/apache/maven/archetype/ui/generation/DefaultArchetypeGenerationQueryer.java
index 5b8f5ae..ddc57dc 100644
--- a/maven-archetype-plugin/src/main/java/org/apache/maven/archetype/ui/generation/DefaultArchetypeGenerationQueryer.java
+++ b/maven-archetype-plugin/src/main/java/org/apache/maven/archetype/ui/generation/DefaultArchetypeGenerationQueryer.java
@@ -36,6 +36,7 @@
     @Requirement
     private Prompter prompter;
 
+    @Override
     public boolean confirmConfiguration( ArchetypeConfiguration archetypeConfiguration )
         throws PrompterException
     {
@@ -51,6 +52,7 @@
         return "Y".equalsIgnoreCase( answer );
     }
 
+    @Override
     public String getPropertyValue( String requiredProperty, String defaultValue, Pattern validationRegex )
         throws PrompterException
     {
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 90e33cf..d4c8b42 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
@@ -48,6 +48,7 @@
     @Requirement( hint = "archetype" )
     private Prompter prompter;
 
+    @Override
     public boolean confirmSelection( ArchetypeDefinition archetypeDefinition )
         throws PrompterException
     {
@@ -60,12 +61,14 @@
         return "Y".equalsIgnoreCase( answer );
     }
 
+    @Override
     public Archetype selectArchetype( Map<String, List<Archetype>> catalogs )
         throws PrompterException
     {
         return selectArchetype( catalogs, null );
     }
 
+    @Override
     public Archetype selectArchetype( Map<String, List<Archetype>> catalogs, ArchetypeDefinition defaultDefinition )
         throws PrompterException
     {
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 c4ac66c..a6e35eb 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
@@ -57,6 +57,7 @@
     @Requirement
     private ArchetypeManager archetypeManager;
 
+    @Override
     public void selectArchetype( ArchetypeGenerationRequest request, Boolean interactiveMode, String catalogs )
         throws ArchetypeNotDefined, UnknownArchetype, UnknownGroup, IOException, PrompterException,
         ArchetypeSelectionFailure
diff --git a/maven-archetype-plugin/src/test/java/org/apache/maven/archetype/ui/generation/DefaultArchetypeGenerationConfigurator2Test.java b/maven-archetype-plugin/src/test/java/org/apache/maven/archetype/ui/generation/DefaultArchetypeGenerationConfigurator2Test.java
index d9fe47b..14e64a4 100644
--- a/maven-archetype-plugin/src/test/java/org/apache/maven/archetype/ui/generation/DefaultArchetypeGenerationConfigurator2Test.java
+++ b/maven-archetype-plugin/src/test/java/org/apache/maven/archetype/ui/generation/DefaultArchetypeGenerationConfigurator2Test.java
@@ -37,6 +37,7 @@
 {
     private DefaultArchetypeGenerationConfigurator configurator;
 
+    @Override
     public void setUp()
         throws Exception
     {
diff --git a/maven-archetype-plugin/src/test/java/org/apache/maven/archetype/ui/generation/DefaultArchetypeGenerationConfiguratorTest.java b/maven-archetype-plugin/src/test/java/org/apache/maven/archetype/ui/generation/DefaultArchetypeGenerationConfiguratorTest.java
index 5abbd0c..57bd985 100644
--- a/maven-archetype-plugin/src/test/java/org/apache/maven/archetype/ui/generation/DefaultArchetypeGenerationConfiguratorTest.java
+++ b/maven-archetype-plugin/src/test/java/org/apache/maven/archetype/ui/generation/DefaultArchetypeGenerationConfiguratorTest.java
@@ -44,6 +44,7 @@
 {
     private DefaultArchetypeGenerationConfigurator configurator;
 
+    @Override
     public void setUp()
         throws Exception
     {
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 13adad9..19f358e 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
@@ -34,6 +34,7 @@
 
     private DefaultArchetypeGenerationQueryer queryer;
 
+    @Override
     public void setUp()
         throws Exception
     {
@@ -68,11 +69,13 @@
     {
         return new AbstractMatcher()
         {
+            @Override
             protected boolean argumentMatches( Object o, Object o1 )
             {
                 return true;
             }
 
+            @Override
             protected String argumentToString( Object o )
             {
                 return "...";
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 afab277..2856b06 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
@@ -38,6 +38,7 @@
 {
     private DefaultArchetypeSelectionQueryer queryer;
 
+    @Override
     public void setUp()
         throws Exception
     {
@@ -211,11 +212,13 @@
                 return value;
             }
 
+            @Override
             protected boolean argumentMatches( Object o, Object o1 )
             {
                 return isPromptString( o1 ) || super.argumentMatches( o, o1 );
             }
 
+            @Override
             protected String argumentToString( Object o )
             {
                 return isPromptString( o ) ? "..." : super.argumentToString( o );
diff --git a/maven-archetype-plugin/src/test/java/org/apache/maven/archetype/ui/generation/DefaultArchetypeSelectorTest.java b/maven-archetype-plugin/src/test/java/org/apache/maven/archetype/ui/generation/DefaultArchetypeSelectorTest.java
index 0ae96c7..98cf0e2 100644
--- a/maven-archetype-plugin/src/test/java/org/apache/maven/archetype/ui/generation/DefaultArchetypeSelectorTest.java
+++ b/maven-archetype-plugin/src/test/java/org/apache/maven/archetype/ui/generation/DefaultArchetypeSelectorTest.java
@@ -42,6 +42,7 @@
 {
     private DefaultArchetypeSelector selector;
 
+    @Override
     public void setUp()
         throws Exception
     {
@@ -199,6 +200,7 @@
     {
         return new AbstractMatcher()
         {
+            @Override
             protected boolean argumentMatches( Object o, Object o1 )
             {
                 return !( o instanceof ArchetypeDefinition ) ||
@@ -248,6 +250,7 @@
                 return true;
             }
 
+            @Override
             protected String argumentToString( Object o )
             {
                 return o instanceof Map ? "..." : toString( (ArchetypeDefinition) o );
diff --git a/pom.xml b/pom.xml
index d74ecce..80c54ba 100644
--- a/pom.xml
+++ b/pom.xml
@@ -75,9 +75,10 @@
   <properties>
     <maven.archetype.scm.devConnection>scm:git:https://gitbox.apache.org/repos/asf/maven-archetype.git</maven.archetype.scm.devConnection>
     <mavenVersion>3.0</mavenVersion>
+    <javaVersion>7</javaVersion>
     <netbeans.hint.useExternalMaven>true</netbeans.hint.useExternalMaven>
     <wagonVersion>2.8</wagonVersion>
-    <surefire.version>2.22.1</surefire.version>
+    <surefire.version>2.21.0</surefire.version>
     <maven.site.path>archetype-archives/archetype-LATEST</maven.site.path>
   </properties>