[MRESOURCES-283] Require Java 8
diff --git a/pom.xml b/pom.xml
index 7a35ef2..b6b1f26 100644
--- a/pom.xml
+++ b/pom.xml
@@ -69,7 +69,7 @@
 
   <properties>
     <mavenVersion>3.2.5</mavenVersion>
-    <javaVersion>7</javaVersion>
+    <javaVersion>8</javaVersion>
     <mavenFilteringVersion>3.1.1</mavenFilteringVersion>
     <sitePluginVersion>3.3</sitePluginVersion>
     <project.build.outputTimestamp>2020-04-07T21:04:00Z</project.build.outputTimestamp>
diff --git a/src/main/java/org/apache/maven/plugin/resources/remote/BundleRemoteResourcesMojo.java b/src/main/java/org/apache/maven/plugin/resources/remote/BundleRemoteResourcesMojo.java
index 379e4ec..4eb1637 100644
--- a/src/main/java/org/apache/maven/plugin/resources/remote/BundleRemoteResourcesMojo.java
+++ b/src/main/java/org/apache/maven/plugin/resources/remote/BundleRemoteResourcesMojo.java
@@ -34,8 +34,6 @@
 import java.io.FileWriter;
 import java.io.IOException;
 import java.io.Writer;
-import java.util.Arrays;
-import java.util.List;
 
 /**
  * Bundle up resources that should be considered as a remote-resource,
@@ -131,7 +129,7 @@
         scanner.addDefaultExcludes();
         scanner.scan();
 
-        List<String> includedFiles = Arrays.asList( scanner.getIncludedFiles() );
+        String[] includedFiles = scanner.getIncludedFiles();
 
         for ( String resource : includedFiles )
         {
diff --git a/src/main/java/org/apache/maven/plugin/resources/remote/ModelInheritanceAssembler.java b/src/main/java/org/apache/maven/plugin/resources/remote/ModelInheritanceAssembler.java
index 31000ae..af228bc 100644
--- a/src/main/java/org/apache/maven/plugin/resources/remote/ModelInheritanceAssembler.java
+++ b/src/main/java/org/apache/maven/plugin/resources/remote/ModelInheritanceAssembler.java
@@ -478,10 +478,8 @@
 
             Map<String, ReportSet> childReportSets = child.getReportSetsAsMap();
 
-            for ( Object parentReportSet1 : parentReportSets )
+            for ( ReportSet parentReportSet : parentReportSets )
             {
-                ReportSet parentReportSet = (ReportSet) parentReportSet1;
-
                 if ( !handleAsInheritance || parentIsInherited )
                 {
                     ReportSet assembledReportSet = parentReportSet;
diff --git a/src/main/java/org/apache/maven/plugin/resources/remote/ProcessRemoteResourcesMojo.java b/src/main/java/org/apache/maven/plugin/resources/remote/ProcessRemoteResourcesMojo.java
index e58e161..aa6a82d 100644
--- a/src/main/java/org/apache/maven/plugin/resources/remote/ProcessRemoteResourcesMojo.java
+++ b/src/main/java/org/apache/maven/plugin/resources/remote/ProcessRemoteResourcesMojo.java
@@ -21,8 +21,6 @@
 
 import java.io.ByteArrayInputStream;
 import java.io.File;
-import java.io.FileInputStream;
-import java.io.FileNotFoundException;
 import java.io.FileOutputStream;
 import java.io.FileReader;
 import java.io.FileWriter;
@@ -34,10 +32,10 @@
 import java.io.PrintWriter;
 import java.io.Reader;
 import java.io.StringReader;
-import java.io.UnsupportedEncodingException;
 import java.io.Writer;
 import java.net.MalformedURLException;
 import java.net.URL;
+import java.nio.file.Files;
 import java.text.SimpleDateFormat;
 import java.util.AbstractMap;
 import java.util.ArrayList;
@@ -254,7 +252,7 @@
      * Merges supplemental data model with artifact metadata. Useful when processing artifacts with
      * incomplete POM metadata.
      */
-    private ModelInheritanceAssembler inheritanceAssembler = new ModelInheritanceAssembler();
+    private final ModelInheritanceAssembler inheritanceAssembler = new ModelInheritanceAssembler();
 
     /**
      * The resource bundles that will be retrieved and processed,
@@ -492,7 +490,7 @@
                 catch ( MalformedURLException e )
                 {
                     // ignore
-                    getLog().debug( "URL issue with supplemental-models.xml: " + e.toString() );
+                    getLog().debug( "URL issue with supplemental-models.xml: " + e );
                 }
             }
         }
@@ -691,7 +689,7 @@
                 getLog().debug( "Adding project with groupId [" + p.getGroupId() + "]" );
             }
         }
-        Collections.sort( projects, new ProjectComparator() );
+        projects.sort( new ProjectComparator() );
         return projects;
     }
 
@@ -709,19 +707,13 @@
                 return dependencyResolver.resolve( project, Arrays.asList( resolveScopes ), mavenSession );
             }
         }
-        catch ( ArtifactResolutionException e )
-        {
-            throw new IllegalStateException( "Failed to resolve dependencies for one or more projects in the reactor. "
-                + "Reason: " + e.getMessage(), e );
-        }
-        catch ( ArtifactNotFoundException e )
+        catch ( ArtifactResolutionException | ArtifactNotFoundException e )
         {
             throw new IllegalStateException( "Failed to resolve dependencies for one or more projects in the reactor. "
                 + "Reason: " + e.getMessage(), e );
         }
     }
 
-    @SuppressWarnings( "unchecked" )
     private Set<Artifact> aggregateProjectDependencyArtifacts()
     {
         Set<Artifact> artifacts = new LinkedHashSet<>();
@@ -868,7 +860,7 @@
     {
         if ( encoding != null )
         {
-            return new InputStreamReader( new FileInputStream( source ), encoding );
+            return new InputStreamReader( Files.newInputStream( source.toPath() ), encoding );
         }
         else
         {
@@ -897,7 +889,7 @@
      * <p>Note: the method should be called after {@link org.apache.commons.io.output.DeferredFileOutputStream#close}
      *
      * @param outStream Deferred stream
-     * @throws IOException
+     * @throws IOException if an I/O error occurs
      */
     private void fileWriteIfDiffers( DeferredFileOutputStream outStream )
         throws IOException
@@ -913,7 +905,7 @@
 
         if ( file.exists() )
         {
-            try ( InputStream is = new FileInputStream( file ) )
+            try ( InputStream is = Files.newInputStream( file.toPath() ) )
             {
                 final InputStream newContents = new ByteArrayInputStream( outStream.getData() );
                 needOverwrite = !IOUtil.contentEquals( is, newContents );
@@ -932,7 +924,7 @@
         }
         getLog().debug( "Writing " + file );
         
-        try ( OutputStream os = new FileOutputStream( file ) )
+        try ( OutputStream os = Files.newOutputStream( file.toPath() ) )
         {
             outStream.writeTo( os );
         }
@@ -1029,7 +1021,6 @@
     private static final String KEY_PROJECTS_ORGS = "projectsSortedByOrganization";
 
     protected VelocityContext buildVelocityContext( Map<String, Object> properties )
-        throws MojoExecutionException
     {
         // the following properties are expensive to calculate, so we provide them lazily
         VelocityContext context = new VelocityContext( properties )
@@ -1274,7 +1265,7 @@
                     if ( appendedResourceFile.exists() )
                     {
                         getLog().info( "Copying appended resource: " + projectResource );
-                        try ( InputStream in = new FileInputStream( appendedResourceFile );
+                        try ( InputStream in = Files.newInputStream( appendedResourceFile.toPath() );
                               OutputStream out = new FileOutputStream( f, true ) )
                         {
                             IOUtil.copy( in, out );
@@ -1307,7 +1298,7 @@
     }
 
     private Writer getWriter( RemoteResourcesBundle bundle, File f )
-        throws IOException, UnsupportedEncodingException, FileNotFoundException
+        throws IOException
     {
         Writer writer;
         if ( bundle.getSourceEncoding() == null )
@@ -1369,7 +1360,7 @@
         return groupId.trim() + ":" + artifactId.trim();
     }
 
-    private Map<String, Model> loadSupplements( String models[] )
+    private Map<String, Model> loadSupplements( String[] models )
         throws MojoExecutionException
     {
         if ( models == null )
@@ -1445,7 +1436,7 @@
         return loc;
     }
 
-    class OrganizationComparator
+    static class OrganizationComparator
         implements Comparator<Organization>
     {
         @Override
@@ -1483,7 +1474,7 @@
         }
     }
 
-    class ProjectComparator
+    static class ProjectComparator
         implements Comparator<MavenProject>
     {
         @Override
@@ -1501,7 +1492,6 @@
     /* LogChute methods */
     @Override
     public void init( RuntimeServices rs )
-        throws Exception
     {
     }
 
diff --git a/src/test/java/org/apache/maven/plugin/resources/remote/RemoteResourcesMojoTest.java b/src/test/java/org/apache/maven/plugin/resources/remote/RemoteResourcesMojoTest.java
index 87b34ba..03bbcfe 100644
--- a/src/test/java/org/apache/maven/plugin/resources/remote/RemoteResourcesMojoTest.java
+++ b/src/test/java/org/apache/maven/plugin/resources/remote/RemoteResourcesMojoTest.java
@@ -22,41 +22,34 @@
 import org.apache.maven.artifact.DefaultArtifact;
 import org.apache.maven.artifact.handler.DefaultArtifactHandler;
 import org.apache.maven.artifact.repository.ArtifactRepository;
-import org.apache.maven.artifact.repository.LegacyLocalRepositoryManager;
 import org.apache.maven.artifact.versioning.VersionRange;
 import org.apache.maven.execution.DefaultMavenExecutionRequest;
 import org.apache.maven.execution.DefaultMavenExecutionResult;
 import org.apache.maven.execution.MavenSession;
-import org.apache.maven.execution.ReactorManager;
 import org.apache.maven.plugin.resources.remote.stub.MavenProjectBuildStub;
 import org.apache.maven.plugin.resources.remote.stub.MavenProjectResourcesStub;
 import org.apache.maven.plugin.testing.AbstractMojoTestCase;
-import org.apache.maven.project.DefaultProjectBuildingRequest;
 import org.apache.maven.project.MavenProject;
-import org.apache.maven.project.ProjectBuildingRequest;
 import org.apache.maven.repository.internal.MavenRepositorySystemUtils;
-import org.codehaus.plexus.DefaultPlexusContainer;
-import org.codehaus.plexus.logging.console.ConsoleLoggerManager;
 import org.codehaus.plexus.util.FileUtils;
 
 import java.io.File;
-import java.io.FileInputStream;
-import java.io.FileOutputStream;
 import java.io.InputStream;
 import java.net.URL;
+import java.nio.charset.StandardCharsets;
+import java.nio.file.Files;
 import java.util.ArrayList;
 import java.util.Arrays;
 import java.util.Calendar;
-import java.util.Properties;
+import java.util.Collections;
 import java.util.jar.JarOutputStream;
 import java.util.zip.ZipEntry;
 import org.codehaus.plexus.util.IOUtil;
 import org.eclipse.aether.DefaultRepositorySystemSession;
-import org.eclipse.aether.RepositorySystemSession;
-import org.eclipse.aether.internal.impl.EnhancedLocalRepositoryManagerFactory;
 import org.eclipse.aether.internal.impl.SimpleLocalRepositoryManagerFactory;
 import org.eclipse.aether.repository.LocalRepository;
-import org.eclipse.aether.repository.LocalRepositoryManager;
+
+import static org.junit.Assert.assertArrayEquals;
 
 
 /**
@@ -80,7 +73,6 @@
 
     @Override
     public void tearDown()
-        throws Exception
     {
 
     }
@@ -256,12 +248,12 @@
         file = new File( file, "UTF-8.bin" );
         assertTrue( file.exists() );
 
-        InputStream in = new FileInputStream( file );
+        InputStream in = Files.newInputStream( file.toPath() );
         byte[] data = IOUtil.toByteArray( in );
         in.close();
 
-        byte[] expected = "\u00E4\u00F6\u00FC\u00C4\u00D6\u00DC\u00DF".getBytes( "UTF-8" );
-        assertTrue( Arrays.equals( expected, data ) );
+        byte[] expected = "\u00E4\u00F6\u00FC\u00C4\u00D6\u00DC\u00DF".getBytes( StandardCharsets.UTF_8 );
+        assertArrayEquals( expected, data );
     }
 
     public void testVelocityISO88591()
@@ -297,12 +289,12 @@
         file = new File( file, "ISO-8859-1.bin" );
         assertTrue( file.exists() );
 
-        InputStream in = new FileInputStream( file );
+        InputStream in = Files.newInputStream( file.toPath() );
         byte[] data = IOUtil.toByteArray( in );
         in.close();
 
-        byte[] expected = "\u00E4\u00F6\u00FC\u00C4\u00D6\u00DC\u00DF".getBytes( "ISO-8859-1" );
-        assertTrue( Arrays.equals( expected, data ) );
+        byte[] expected = "\u00E4\u00F6\u00FC\u00C4\u00D6\u00DC\u00DF".getBytes( StandardCharsets.ISO_8859_1 );
+        assertArrayEquals( expected, data );
     }
 
     public void testFilteredBundles()
@@ -385,9 +377,9 @@
     }
 
     protected void buildResourceBundle( String id,
-                                       String sourceEncoding,
-                                       String resourceNames[],
-                                       File jarName )
+                                        String sourceEncoding,
+                                        String[] resourceNames,
+                                        File jarName )
     throws Exception
     {
         final MavenProjectResourcesStub project = createTestProject( id );
@@ -418,7 +410,7 @@
 
         if ( null != jarName )
         {
-            JarOutputStream jar = new JarOutputStream( new FileOutputStream( jarName ) );
+            JarOutputStream jar = new JarOutputStream( Files.newOutputStream( jarName.toPath() ) );
             jar.putNextEntry( new ZipEntry( "META-INF/maven/remote-resources.xml" ) );
             jar.write( data.getBytes() );
             jar.closeEntry();
@@ -426,7 +418,7 @@
             for ( String resourceName : resourceNames )
             {
                 File resource = new File( resourceDir, resourceName );
-                InputStream in = new FileInputStream( resource );
+                InputStream in = Files.newInputStream( resource.toPath() );
                 jar.putNextEntry( new ZipEntry( resourceName ) );
                 IOUtil.copy( in, jar );
                 jar.closeEntry();
@@ -500,7 +492,7 @@
 
 
     protected ProcessRemoteResourcesMojo lookupProcessMojoWithSettings( final MavenProject project,
-                                                                 String bundles[] )
+                                                                        String[] bundles )
         throws Exception
     {
         return lookupProcessMojoWithSettings( project, new ArrayList<>( Arrays.asList( bundles ) ) );
@@ -522,11 +514,11 @@
         request = new DefaultMavenExecutionRequest();
         request.setUserProperties( null );
         request.setLocalRepository( localRepository );
-        request.setGoals( Arrays.asList( "install" ) );
+        request.setGoals( Collections.singletonList( "install" ) );
         request.setBaseDirectory( project.getBasedir() );
         request.setStartTime( Calendar.getInstance().getTime() );
         MavenSession session = new MavenSession( getContainer(), reposession, request, new DefaultMavenExecutionResult() );
-        session.setProjects( Arrays.asList( project ) );
+        session.setProjects( Collections.singletonList( project ) );
 
         setVariableValueToObject( mojo, "project", project );
         setVariableValueToObject( mojo, "outputDirectory", new File( project.getBuild().getOutputDirectory() ) );
@@ -540,6 +532,6 @@
     protected ProcessRemoteResourcesMojo lookupProcessMojoWithDefaultSettings( final MavenProject project )
         throws Exception
     {
-        return lookupProcessMojoWithSettings( project, new ArrayList<String>() );
+        return lookupProcessMojoWithSettings( project, new ArrayList<>() );
     }
 }
diff --git a/src/test/java/org/apache/maven/plugin/resources/remote/stub/ArtifactStub.java b/src/test/java/org/apache/maven/plugin/resources/remote/stub/ArtifactStub.java
index fc52d6f..77b4d1f 100644
--- a/src/test/java/org/apache/maven/plugin/resources/remote/stub/ArtifactStub.java
+++ b/src/test/java/org/apache/maven/plugin/resources/remote/stub/ArtifactStub.java
@@ -31,7 +31,6 @@
 import org.apache.maven.artifact.repository.ArtifactRepository;
 import org.apache.maven.artifact.resolver.filter.ArtifactFilter;
 import org.apache.maven.artifact.versioning.ArtifactVersion;
-import org.apache.maven.artifact.versioning.OverConstrainedVersionException;
 import org.apache.maven.artifact.versioning.VersionRange;
 
 
@@ -358,14 +357,12 @@
 
     @Override
     public ArtifactVersion getSelectedVersion()
-        throws OverConstrainedVersionException
     {
         return null;
     }
 
     @Override
     public boolean isSelectedVersionKnown()
-        throws OverConstrainedVersionException
     {
         return true;
     }
diff --git a/src/test/java/org/apache/maven/plugin/resources/remote/stub/MavenProjectBasicStub.java b/src/test/java/org/apache/maven/plugin/resources/remote/stub/MavenProjectBasicStub.java
index 07514ab..2f15549 100644
--- a/src/test/java/org/apache/maven/plugin/resources/remote/stub/MavenProjectBasicStub.java
+++ b/src/test/java/org/apache/maven/plugin/resources/remote/stub/MavenProjectBasicStub.java
@@ -25,8 +25,6 @@
 import java.util.Properties;
 
 import org.apache.maven.artifact.Artifact;
-import org.apache.maven.artifact.repository.ArtifactRepository;
-import org.apache.maven.model.Profile;
 import org.apache.maven.project.MavenProject;
 import org.codehaus.plexus.PlexusTestCase;
 import org.codehaus.plexus.util.FileUtils;
@@ -52,7 +50,6 @@
     protected ArtifactStub artifact;
 
     public MavenProjectBasicStub( String id )
-        throws Exception
     {
         // most values are hardcoded to have a controlled environment
         super( new ModelStub() );
@@ -156,14 +153,14 @@
     {
         // the pom should be located in the isolated dummy root
         super.setFile( new File( getBasedir(), "pom.xml" ) );
-        super.setDependencyArtifacts( new HashSet<Artifact>() );
-        super.setArtifacts( new HashSet<Artifact>() );
-        super.setReportArtifacts( new HashSet<Artifact>() );
-        super.setExtensionArtifacts( new HashSet<Artifact>() );
-        super.setRemoteArtifactRepositories( new LinkedList<ArtifactRepository>() );
-        super.setPluginArtifactRepositories( new LinkedList<ArtifactRepository>() );
-        super.setCollectedProjects( new LinkedList<MavenProject>() );
-        super.setActiveProfiles( new LinkedList<Profile>() );
+        super.setDependencyArtifacts( new HashSet<>() );
+        super.setArtifacts( new HashSet<>() );
+        super.setReportArtifacts( new HashSet<>() );
+        super.setExtensionArtifacts( new HashSet<>() );
+        super.setRemoteArtifactRepositories( new LinkedList<>() );
+        super.setPluginArtifactRepositories( new LinkedList<>() );
+        super.setCollectedProjects( new LinkedList<>() );
+        super.setActiveProfiles( new LinkedList<>() );
         super.setOriginalModel( null );
         super.setExecutionProject( this );
         super.setArtifact( artifact );
diff --git a/src/test/java/org/apache/maven/plugin/resources/remote/stub/MavenProjectBuildStub.java b/src/test/java/org/apache/maven/plugin/resources/remote/stub/MavenProjectBuildStub.java
index 3339fbe..4bfd0a2 100644
--- a/src/test/java/org/apache/maven/plugin/resources/remote/stub/MavenProjectBuildStub.java
+++ b/src/test/java/org/apache/maven/plugin/resources/remote/stub/MavenProjectBuildStub.java
@@ -154,8 +154,8 @@
      * also returns false if it is relative to
      * the parent
      *
-     * @param path
-     * @return
+     * @param path the path to check
+     * @return true if the path is relative
      */
     private boolean isValidPath( String path )
     {