diff --git a/pom.xml b/pom.xml
index f0c8250..13db999 100644
--- a/pom.xml
+++ b/pom.xml
@@ -92,6 +92,7 @@
     <doxiaVersion>1.9-SNAPSHOT</doxiaVersion>
     <doxiaSitetoolsVersion>1.8.1</doxiaSitetoolsVersion>
     <mavenVersion>2.2.1</mavenVersion>
+    <javaVersion>7</javaVersion>
   </properties>
 
   <dependencyManagement>
diff --git a/src/main/java/org/apache/maven/plugins/pdf/DocumentDescriptorReader.java b/src/main/java/org/apache/maven/plugins/pdf/DocumentDescriptorReader.java
index e8c56c8..7b72355 100644
--- a/src/main/java/org/apache/maven/plugins/pdf/DocumentDescriptorReader.java
+++ b/src/main/java/org/apache/maven/plugins/pdf/DocumentDescriptorReader.java
@@ -114,7 +114,6 @@
             }
         }
 
-        Reader reader = null;
         try
         {
             // System properties
@@ -149,21 +148,19 @@
             final DateBean bean = new DateBean();
             interpolator.addValueSource( new ObjectBasedValueSource( bean ) );
 
-            reader = ReaderFactory.newXmlReader( docDescriptor );
-
-            final String interpolatedDoc = interpolator.interpolate( IOUtil.toString( reader ) );
-
-            reader.close();
-            reader = null;
-
-            if ( log != null && log.isDebugEnabled() )
+            try ( Reader reader = ReaderFactory.newXmlReader( docDescriptor ) )
             {
-                log.debug( "Interpolated document descriptor ("
-                               + docDescriptor.getAbsolutePath() + ")\n" + interpolatedDoc );
-            }
+                final String interpolatedDoc = interpolator.interpolate( IOUtil.toString( reader ) );
 
-            // No Strict
-            return new DocumentXpp3Reader().read( new StringReader( interpolatedDoc ), false );
+                if ( log != null && log.isDebugEnabled() )
+                {
+                    log.debug( "Interpolated document descriptor ("
+                                   + docDescriptor.getAbsolutePath() + ")\n" + interpolatedDoc );
+                }
+
+                // No Strict
+                return new DocumentXpp3Reader().read( new StringReader( interpolatedDoc ), false );
+            }
         }
         catch ( InterpolationException e )
         {
@@ -171,9 +168,5 @@
             io.initCause( e );
             throw io;
         }
-        finally
-        {
-            IOUtil.close( reader );
-        }
     }
 }
diff --git a/src/main/java/org/apache/maven/plugins/pdf/DocumentModelBuilder.java b/src/main/java/org/apache/maven/plugins/pdf/DocumentModelBuilder.java
index d910fee..025a597 100644
--- a/src/main/java/org/apache/maven/plugins/pdf/DocumentModelBuilder.java
+++ b/src/main/java/org/apache/maven/plugins/pdf/DocumentModelBuilder.java
@@ -35,7 +35,6 @@
 import org.apache.maven.doxia.site.decoration.MenuItem;
 import org.apache.maven.model.Developer;
 import org.apache.maven.project.MavenProject;
-import org.codehaus.plexus.util.IOUtil;
 import org.codehaus.plexus.util.StringUtils;
 import org.apache.commons.io.input.XmlStreamReader;
 
@@ -219,7 +218,7 @@
             return null;
         }
 
-        final List<DocumentAuthor> ret = new ArrayList<DocumentAuthor>( 4 );
+        final List<DocumentAuthor> ret = new ArrayList<>( 4 );
 
         for ( Object o : project.getDevelopers() )
         {
@@ -305,21 +304,16 @@
         }
 
         String encoding = project.getModel().getModelEncoding();
+
         // Workaround for MNG-4289
-        XmlStreamReader reader = null;
-        try
+        try ( XmlStreamReader reader = new XmlStreamReader( project.getFile() ) )
         {
-            reader = new XmlStreamReader( project.getFile() );
             encoding = reader.getEncoding();
         }
         catch ( IOException e )
         {
             // nop
         }
-        finally
-        {
-            IOUtil.close( reader );
-        }
 
         if ( StringUtils.isEmpty( encoding ) )
         {
diff --git a/src/main/java/org/apache/maven/plugins/pdf/PdfAggregateMojo.java b/src/main/java/org/apache/maven/plugins/pdf/PdfAggregateMojo.java
index cf18033..691c8a4 100644
--- a/src/main/java/org/apache/maven/plugins/pdf/PdfAggregateMojo.java
+++ b/src/main/java/org/apache/maven/plugins/pdf/PdfAggregateMojo.java
@@ -86,7 +86,6 @@
     }
 
     protected void prepareTempSiteDirectory( final File tmpSiteDir )
-        throws IOException
     {
         tmpSiteDir.mkdirs();
     }
@@ -202,7 +201,7 @@
         catch ( IOException e )
         {
             getLog().error( "Error while reading table of contents of module " + project.getArtifactId(), e );
-            return Collections.<String, Object>emptyMap();
+            return Collections.emptyMap();
         }
     }
 
@@ -224,7 +223,7 @@
 
     private String getStagedId( MavenProject p )
     {
-        Deque<String> projectPath = new ArrayDeque<String>();
+        Deque<String> projectPath = new ArrayDeque<>();
         projectPath.addFirst( p.getArtifactId() );
         while ( p.getParent() != null )
         {
diff --git a/src/main/java/org/apache/maven/plugins/pdf/PdfMojo.java b/src/main/java/org/apache/maven/plugins/pdf/PdfMojo.java
index 86bd35c..142c777 100644
--- a/src/main/java/org/apache/maven/plugins/pdf/PdfMojo.java
+++ b/src/main/java/org/apache/maven/plugins/pdf/PdfMojo.java
@@ -812,16 +812,10 @@
 
             if ( descriptorFile.exists() )
             {
-                XmlStreamReader reader = null;
-                try
+                try ( XmlStreamReader reader = new XmlStreamReader( descriptorFile ) )
                 {
-                    reader = new XmlStreamReader( descriptorFile );
-
                     String siteDescriptorContent = IOUtil.toString( reader );
 
-                    reader.close();
-                    reader = null;
-
                     siteDescriptorContent =
                         siteTool.getInterpolatedSiteDescriptorContent( new HashMap<String, String>( 2 ), project,
                                                                        siteDescriptorContent );
@@ -840,10 +834,6 @@
                 {
                     throw new MojoExecutionException( "Error when interpoling site descriptor", e );
                 }
-                finally
-                {
-                    IOUtil.close( reader );
-                }
             }
 
             this.defaultDecorationModel = decoration;
@@ -938,13 +928,9 @@
             final File doc = FileUtils.createTempFile( "pdf", ".xml", outputDir );
             final DocumentXpp3Writer xpp3 = new DocumentXpp3Writer();
 
-            Writer w = null;
-            try
+            try ( Writer writer = WriterFactory.newXmlWriter( doc ) )
             {
-                w = WriterFactory.newXmlWriter( doc );
-                xpp3.write( w, docModel );
-                w.close();
-                w = null;
+                xpp3.write( writer, docModel );
                 getLog().debug( "Generated a default document model: " + doc.getAbsolutePath() );
             }
             catch ( IOException e )
@@ -952,10 +938,6 @@
                 getLog().error( "Failed to write document model: " + e.getMessage() );
                 getLog().debug( e );
             }
-            finally
-            {
-                IOUtil.close( w );
-            }
         }
     }
 
@@ -1174,7 +1156,7 @@
     {
         if ( this.generatedMavenReports == null )
         {
-            this.generatedMavenReports = new HashMap<Locale, List<MavenReport>>( 2 );
+            this.generatedMavenReports = new HashMap<>( 2 );
         }
 
         if ( this.generatedMavenReports.get( locale ) == null )
@@ -1216,9 +1198,9 @@
         documentTOCItem.setName( i18n.getString( "pdf-plugin", locale, "toc.project-info.item" ) );
         documentTOCItem.setRef( "project-info" ); // see #generateMavenReports(Locale)
 
-        List<String> addedRef = new ArrayList<String>( 4 );
+        List<String> addedRef = new ArrayList<>( 4 );
 
-        List<DocumentTOCItem> items = new ArrayList<DocumentTOCItem>( 4 );
+        List<DocumentTOCItem> items = new ArrayList<>( 4 );
 
         // append generated report defined as MavenReport
         for ( final MavenReport report : getGeneratedMavenReports( locale ) )
@@ -1311,15 +1293,9 @@
         final IndexEntry entry = new IndexEntry( "index" );
         final IndexingSink titleSink = new IndexingSink( entry );
 
-        Reader reader = null;
-        try
+        try ( Reader reader = ReaderFactory.newXmlReader( f ) )
         {
-            reader = ReaderFactory.newXmlReader( f );
-
             doxia.parse( reader, f.getParentFile().getName(), titleSink );
-
-            reader.close();
-            reader = null;
         }
         catch ( ParseException e )
         {
@@ -1333,10 +1309,6 @@
             getLog().debug( e );
             return null;
         }
-        finally
-        {
-            IOUtil.close( reader );
-        }
 
         return titleSink.getTitle();
     }
@@ -1353,15 +1325,9 @@
     private boolean isValidGeneratedReportXdoc( String fullGoal, File generatedReport, String localReportName )
     {
         SinkAdapter sinkAdapter = new SinkAdapter();
-        Reader reader = null;
-        try
+        try ( Reader reader = ReaderFactory.newXmlReader( generatedReport ) )
         {
-            reader = ReaderFactory.newXmlReader( generatedReport );
-
             doxia.parse( reader, "xdoc", sinkAdapter );
-
-            reader.close();
-            reader = null;
         }
         catch ( ParseException e )
         {
@@ -1403,10 +1369,6 @@
 
             return false;
         }
-        finally
-        {
-            IOUtil.close( reader );
-        }
 
         return true;
     }
@@ -1494,24 +1456,15 @@
         // if this ever changes, we will have to revisit this code.
         final Properties properties = new Properties();
 
-        InputStream in = null;
-        try
+        try ( InputStream in = MavenProject.class.getClassLoader().getResourceAsStream(
+                "META-INF/maven/org.apache.maven/maven-core/pom.properties" ) )
         {
-            in = MavenProject.class.getClassLoader().getResourceAsStream( "META-INF/maven/org.apache.maven/maven-core/"
-                                                                              + "pom.properties" );
-
             properties.load( in );
-            in.close();
-            in = null;
         }
         catch ( IOException ioe )
         {
             return "";
         }
-        finally
-        {
-            IOUtil.close( in );
-        }
 
         return properties.getProperty( "version" ).trim();
     }
@@ -1539,19 +1492,10 @@
             return;
         }
 
-        Writer writer = null;
-        try
+        try ( Writer writer = WriterFactory.newXmlWriter( toFile ) )
         {
-            writer = WriterFactory.newXmlWriter( toFile );
             // see PdfSink#table()
             writer.write( StringUtils.replace( content, "<table><table", "<table" ) );
-
-            writer.close();
-            writer = null;
-        }
-        finally
-        {
-            IOUtil.close( writer );
         }
     }
 
diff --git a/src/main/java/org/apache/maven/plugins/pdf/TocFileHelper.java b/src/main/java/org/apache/maven/plugins/pdf/TocFileHelper.java
index c42b29f..c005b91 100644
--- a/src/main/java/org/apache/maven/plugins/pdf/TocFileHelper.java
+++ b/src/main/java/org/apache/maven/plugins/pdf/TocFileHelper.java
@@ -28,7 +28,6 @@
 
 import org.apache.maven.doxia.document.DocumentTOC;
 import org.apache.maven.doxia.document.DocumentTOCItem;
-import org.codehaus.plexus.util.IOUtil;
 import org.codehaus.plexus.util.ReaderFactory;
 import org.codehaus.plexus.util.WriterFactory;
 import org.kopitubruk.util.json.IndentPadding;
@@ -55,33 +54,19 @@
         jsonConfig.addReflectClass( DocumentTOC.class );
         jsonConfig.addReflectClass( DocumentTOCItem.class );
 
-        Writer writer = null;
-        try
+        try ( Writer writer = WriterFactory.newWriter( getTocFile( workingDirectory ), "UTF-8" ) )
         {
-            writer = WriterFactory.newWriter( getTocFile( workingDirectory ), "UTF-8" );
             JSONUtil.toJSON( toc, jsonConfig, writer );
-            writer.close();
-            writer = null;
-        }
-        finally
-        {
-            IOUtil.close( writer );
         }
     }
 
     static Map<String, Object> loadToc( File workingDirectory )
         throws IOException
     {
-        Reader reader = null;
-        try
+        try ( Reader reader = ReaderFactory.newReader( getTocFile( workingDirectory ), "UTF-8" ) )
         {
-            reader = ReaderFactory.newReader( getTocFile( workingDirectory ), "UTF-8" );
             return (Map) JSONParser.parseJSON( reader );
         }
-        finally
-        {
-            IOUtil.close( reader );
-        }
     }
 
     private static File getTocFile( File workingDirectory )
diff --git a/src/test/java/org/apache/maven/plugins/pdf/DocumentModelBuilderTest.java b/src/test/java/org/apache/maven/plugins/pdf/DocumentModelBuilderTest.java
index e2829e9..84ba98c 100644
--- a/src/test/java/org/apache/maven/plugins/pdf/DocumentModelBuilderTest.java
+++ b/src/test/java/org/apache/maven/plugins/pdf/DocumentModelBuilderTest.java
@@ -118,19 +118,9 @@
     private DecorationModel getDecorationModelFromFile( File descriptorFile )
         throws IOException, XmlPullParserException
     {
-        Reader reader = null;
-
-        try
+        try ( Reader reader = ReaderFactory.newXmlReader( descriptorFile ) )
         {
-            reader = ReaderFactory.newXmlReader( descriptorFile );
-            final DecorationModel decorationModel = new DecorationXpp3Reader().read( reader );
-            reader.close();
-            reader = null;
-            return decorationModel;
-        }
-        finally
-        {
-            IOUtil.close( reader );
+            return new DecorationXpp3Reader().read( reader );
         }
     }
 
diff --git a/src/test/java/org/apache/maven/plugins/pdf/PdfMojoTest.java b/src/test/java/org/apache/maven/plugins/pdf/PdfMojoTest.java
index 28ff7ec..6d45d81 100644
--- a/src/test/java/org/apache/maven/plugins/pdf/PdfMojoTest.java
+++ b/src/test/java/org/apache/maven/plugins/pdf/PdfMojoTest.java
@@ -79,19 +79,12 @@
         assertTrue( "FO: Fo file not created!", foFile.exists() );
         assertTrue( "FO: Fo file has no content!", foFile.length() > 0 );
 
-        Reader reader = null;
         String foContent;
-        try
+        try ( Reader reader = ReaderFactory.newXmlReader( foFile ) )
         {
-            reader = ReaderFactory.newXmlReader( foFile );
             foContent = IOUtil.toString( reader );
-            reader.close();
-            reader = null;
         }
-        finally
-        {
-            IOUtil.close( reader );
-        }
+
         // ${pom.name}
         assertTrue( foContent.indexOf( "Test filtering" ) > 0 );
         assertTrue( foContent.indexOf( "1.0-SNAPSHOT" ) > 0 );
@@ -129,7 +122,6 @@
     }
 
     protected void executePdfMojo( String pom, String pdfFilename )
-        throws Exception
     {
         // MPDF-78: test desactivated because injection of PlexusContainer fails
         return;
diff --git a/src/test/java/org/apache/maven/plugins/pdf/stubs/DefaultMavenProjectStub.java b/src/test/java/org/apache/maven/plugins/pdf/stubs/DefaultMavenProjectStub.java
index 48f3e70..240dfb3 100644
--- a/src/test/java/org/apache/maven/plugins/pdf/stubs/DefaultMavenProjectStub.java
+++ b/src/test/java/org/apache/maven/plugins/pdf/stubs/DefaultMavenProjectStub.java
@@ -42,23 +42,16 @@
     public DefaultMavenProjectStub()
     {
         MavenXpp3Reader pomReader = new MavenXpp3Reader();
-        Reader reader = null;
-        try
+
+        try ( Reader reader = ReaderFactory.newXmlReader( getFile() ) )
         {
-            reader = ReaderFactory.newXmlReader( getFile() );
             final Model model = pomReader.read( reader );
             setModel( model );
-            reader.close();
-            reader = null;
         }
         catch ( Exception e )
         {
             throw new RuntimeException( e );
         }
-        finally
-        {
-            IOUtil.close( reader );
-        }
     }
 
     /** {@inheritDoc} */
diff --git a/src/test/java/org/apache/maven/plugins/pdf/stubs/FilteringMavenProjectStub.java b/src/test/java/org/apache/maven/plugins/pdf/stubs/FilteringMavenProjectStub.java
index 68c2b3b..93a587f 100644
--- a/src/test/java/org/apache/maven/plugins/pdf/stubs/FilteringMavenProjectStub.java
+++ b/src/test/java/org/apache/maven/plugins/pdf/stubs/FilteringMavenProjectStub.java
@@ -43,23 +43,15 @@
     public FilteringMavenProjectStub()
     {
         MavenXpp3Reader pomReader = new MavenXpp3Reader();
-        Reader reader = null;
-        try
+        try ( Reader reader = ReaderFactory.newXmlReader( getFile() ) )
         {
-            reader = ReaderFactory.newXmlReader( getFile() );
             final Model model = pomReader.read( reader );
             setModel( model );
-            reader.close();
-            reader = null;
         }
         catch ( Exception e )
         {
             throw new RuntimeException( e );
         }
-        finally
-        {
-            IOUtil.close( reader );
-        }
     }
 
     /** {@inheritDoc} */
diff --git a/src/test/java/org/apache/maven/plugins/pdf/stubs/ITextMavenProjectStub.java b/src/test/java/org/apache/maven/plugins/pdf/stubs/ITextMavenProjectStub.java
index 7d81d5a..0b2e5bf 100644
--- a/src/test/java/org/apache/maven/plugins/pdf/stubs/ITextMavenProjectStub.java
+++ b/src/test/java/org/apache/maven/plugins/pdf/stubs/ITextMavenProjectStub.java
@@ -42,23 +42,16 @@
     public ITextMavenProjectStub()
     {
         MavenXpp3Reader pomReader = new MavenXpp3Reader();
-        Reader reader = null;
-        try
+
+        try ( Reader reader = ReaderFactory.newXmlReader( getFile() ) )
         {
-            reader = ReaderFactory.newXmlReader( getFile() );
             final Model model = pomReader.read( reader );
             setModel( model );
-            reader.close();
-            reader = null;
         }
         catch ( Exception e )
         {
             throw new RuntimeException( e );
         }
-        finally
-        {
-            IOUtil.close( reader );
-        }
     }
 
     /** {@inheritDoc} */
diff --git a/src/test/java/org/apache/maven/plugins/pdf/stubs/ModelBuilderMavenProjectStub.java b/src/test/java/org/apache/maven/plugins/pdf/stubs/ModelBuilderMavenProjectStub.java
index 2369900..b74cf35 100644
--- a/src/test/java/org/apache/maven/plugins/pdf/stubs/ModelBuilderMavenProjectStub.java
+++ b/src/test/java/org/apache/maven/plugins/pdf/stubs/ModelBuilderMavenProjectStub.java
@@ -41,17 +41,11 @@
      */
     public ModelBuilderMavenProjectStub()
     {
-        XmlStreamReader reader = null;
-        try
+        try ( XmlStreamReader reader = new XmlStreamReader( getFile() ) )
         {
-            reader = new XmlStreamReader( getFile() );
-
             final Model model = new MavenXpp3Reader().read( reader );
             setModel( model );
 
-            reader.close();
-            reader = null;
-
             setGroupId( model.getGroupId() );
             setArtifactId( model.getArtifactId() );
             setVersion( model.getVersion() );
@@ -64,10 +58,6 @@
         {
             throw new RuntimeException( e );
         }
-        finally
-        {
-            IOUtil.close( reader );
-        }
     }
 
     /** {@inheritDoc} */
