diff --git a/pom.xml b/pom.xml
index 4cda973..594e3de 100644
--- a/pom.xml
+++ b/pom.xml
@@ -23,8 +23,8 @@
   <parent>
     <groupId>org.apache.maven.shared</groupId>
     <artifactId>maven-shared-components</artifactId>
-    <version>30</version>
-    <relativePath>../../pom/maven/maven-shared-components/pom.xml</relativePath>
+    <version>33</version>
+    <relativePath/>
   </parent>
 
   <groupId>org.apache.maven.reporting</groupId>
@@ -57,6 +57,7 @@
 
   <properties>
     <mavenVersion>3.0</mavenVersion>
+    <javaVersion>7</javaVersion>
     <plexusVersion>1.5.4</plexusVersion>
   </properties>
 
@@ -106,7 +107,6 @@
     <dependency>
       <groupId>org.codehaus.plexus</groupId>
       <artifactId>plexus-component-annotations</artifactId>
-      <version>1.6</version>
       <scope>provided</scope>
     </dependency>
 
@@ -287,7 +287,6 @@
       <plugin>
         <groupId>org.codehaus.plexus</groupId>
         <artifactId>plexus-component-metadata</artifactId>
-        <version>1.7.1</version>
         <executions>
           <execution>
             <goals>
@@ -323,7 +322,6 @@
       <plugin>
         <groupId>org.apache.maven.plugins</groupId>
         <artifactId>maven-invoker-plugin</artifactId>
-        <version>3.0.1</version><!-- TODO remove version when upgrading parent pom -->
         <configuration>
           <debug>true</debug>
           <projectsDirectory>src/it</projectsDirectory>
@@ -332,12 +330,15 @@
           <postBuildHookScript>verify</postBuildHookScript>
           <localRepositoryPath>${project.build.directory}/local-repo</localRepositoryPath>
           <settingsFile>src/it/settings.xml</settingsFile>
+          <ignoreFailures>false</ignoreFailures>
           <pomIncludes>
             <pomInclude>*/pom.xml</pomInclude>
           </pomIncludes>
           <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>
         </configuration>
         <executions>
diff --git a/src/it/pluginManagement_dependencies/pom.xml b/src/it/pluginManagement_dependencies/pom.xml
index 9ad03e6..8d09ab5 100644
--- a/src/it/pluginManagement_dependencies/pom.xml
+++ b/src/it/pluginManagement_dependencies/pom.xml
@@ -49,7 +49,7 @@
         </plugin>
         <plugin>
           <artifactId>maven-site-plugin</artifactId>
-          <version>3.3</version>
+          <version>3.7.1</version>
           <dependencies>
             <dependency>
               <groupId>@project.groupId@</groupId>
@@ -73,6 +73,17 @@
           </reportSet>
         </reportSets>
       </plugin>
+      <plugin>
+        <groupId>org.apache.maven.plugins</groupId>
+        <artifactId>maven-project-info-reports-plugin</artifactId>
+        <reportSets>
+          <reportSet>
+            <reports>
+              <report>index</report>
+            </reports>
+          </reportSet>
+        </reportSets>
+      </plugin>
     </plugins>
   </reporting>
 </project>
diff --git a/src/main/java/org/apache/maven/reporting/exec/DefaultMavenPluginManagerHelper.java b/src/main/java/org/apache/maven/reporting/exec/DefaultMavenPluginManagerHelper.java
index 4de901e..1de8dc7 100644
--- a/src/main/java/org/apache/maven/reporting/exec/DefaultMavenPluginManagerHelper.java
+++ b/src/main/java/org/apache/maven/reporting/exec/DefaultMavenPluginManagerHelper.java
@@ -125,6 +125,7 @@
         }
     }
 
+    @Override
     public PluginDescriptor getPluginDescriptor( Plugin plugin, MavenSession session )
         throws PluginResolutionException, PluginDescriptorParsingException, InvalidPluginDescriptorException
     {
@@ -173,6 +174,7 @@
         return null;
     }
 
+    @Override
     public void setupPluginRealm( PluginDescriptor pluginDescriptor, MavenSession session, ClassLoader parent,
                                   List<String> imports, List<String> excludeArtifactIds )
         throws PluginResolutionException, PluginContainerException
diff --git a/src/main/java/org/apache/maven/reporting/exec/DefaultMavenReportExecutor.java b/src/main/java/org/apache/maven/reporting/exec/DefaultMavenReportExecutor.java
index ceb6ed3..1682073 100644
--- a/src/main/java/org/apache/maven/reporting/exec/DefaultMavenReportExecutor.java
+++ b/src/main/java/org/apache/maven/reporting/exec/DefaultMavenReportExecutor.java
@@ -125,6 +125,7 @@
     private static final List<String> EXCLUDES = Arrays.asList( "doxia-site-renderer", "doxia-sink-api",
                                                                 "maven-reporting-api" );
 
+    @Override
     public List<MavenReportExecution> buildMavenReports( MavenReportExecutorRequest mavenReportExecutorRequest )
         throws MojoExecutionException
     {
@@ -134,8 +135,8 @@
         }
         getLog().debug( "DefaultMavenReportExecutor.buildMavenReports()" );
 
-        Set<String> reportPluginKeys = new HashSet<String>();
-        List<MavenReportExecution> reportExecutions = new ArrayList<MavenReportExecution>();
+        Set<String> reportPluginKeys = new HashSet<>();
+        List<MavenReportExecution> reportExecutions = new ArrayList<>();
 
         String pluginKey = "";
         try
@@ -177,11 +178,11 @@
             mavenPluginManagerHelper.getPluginDescriptor( plugin, mavenReportExecutorRequest.getMavenSession() );
 
         // step 2: prepare the goals
-        List<GoalWithConf> goalsWithConfiguration = new ArrayList<GoalWithConf>();
+        List<GoalWithConf> goalsWithConfiguration = new ArrayList<>();
         boolean hasUserDefinedReports = prepareGoals( reportPlugin, pluginDescriptor, goalsWithConfiguration );
 
         // step 3: prepare the reports
-        List<MavenReportExecution> reports = new ArrayList<MavenReportExecution>();
+        List<MavenReportExecution> reports = new ArrayList<>( goalsWithConfiguration.size() );
         for ( GoalWithConf report : goalsWithConfiguration )
         {
             MavenReportExecution mavenReportExecution =
@@ -230,7 +231,7 @@
             return false;
         }
 
-        Set<String> goals = new HashSet<String>();
+        Set<String> goals = new HashSet<>();
         for ( String report : reportPlugin.getReports() )
         {
             if ( goals.add( report ) )
diff --git a/src/test/java/org/apache/maven/reporting/exec/TestDefaultMavenReportExecutor.java b/src/test/java/org/apache/maven/reporting/exec/TestDefaultMavenReportExecutor.java
index a13102e..ced71fb 100644
--- a/src/test/java/org/apache/maven/reporting/exec/TestDefaultMavenReportExecutor.java
+++ b/src/test/java/org/apache/maven/reporting/exec/TestDefaultMavenReportExecutor.java
@@ -190,16 +190,19 @@
 
         request.setWorkspaceReader( new WorkspaceReader()
         {
+            @Override
             public WorkspaceRepository getRepository()
             {
                 return new WorkspaceRepository();
             }
 
+            @Override
             public File findArtifact( Artifact artifact )
             {
                 return null;
             }
 
+            @Override
             public List<String> findVersions( Artifact artifact )
             {
                 return Collections.emptyList();
