Fix a possible file handle leak when exceptions are thrown in
RestJiraDownloader and use try-with-resources in select other files.
diff --git a/src/main/java/org/apache/maven/plugins/announcement/AnnouncementMailMojo.java b/src/main/java/org/apache/maven/plugins/announcement/AnnouncementMailMojo.java
index d618463..f29ded1 100644
--- a/src/main/java/org/apache/maven/plugins/announcement/AnnouncementMailMojo.java
+++ b/src/main/java/org/apache/maven/plugins/announcement/AnnouncementMailMojo.java
@@ -364,7 +364,6 @@
     protected String readAnnouncement( File file )
         throws MojoExecutionException
     {
-        InputStreamReader reader = null;
         try
         {
             if ( StringUtils.isEmpty( templateEncoding ) )
@@ -375,11 +374,10 @@
 
             }
 
-            reader = new InputStreamReader( new FileInputStream( file ), templateEncoding );
-            final String announcement = IOUtil.toString( reader );
-            reader.close();
-            reader = null;
-            return announcement;
+            try ( InputStreamReader reader = new InputStreamReader( new FileInputStream( file ), templateEncoding ) )
+            {
+                return IOUtil.toString( reader );
+            }
         }
         catch ( FileNotFoundException fnfe )
         {
@@ -393,10 +391,6 @@
         {
             throw new MojoExecutionException( "Failed to read the announcement file.", ioe );
         }
-        finally
-        {
-            IOUtil.close( reader );
-        }
     }
 
     /**
diff --git a/src/main/java/org/apache/maven/plugins/changes/ChangesMojo.java b/src/main/java/org/apache/maven/plugins/changes/ChangesMojo.java
index cae341b..be3bd78 100644
--- a/src/main/java/org/apache/maven/plugins/changes/ChangesMojo.java
+++ b/src/main/java/org/apache/maven/plugins/changes/ChangesMojo.java
@@ -47,7 +47,6 @@
 import org.apache.maven.shared.filtering.MavenFileFilterRequest;
 import org.apache.maven.shared.filtering.MavenFilteringException;
 import org.codehaus.plexus.util.FileUtils;
-import org.codehaus.plexus.util.IOUtil;
 import org.codehaus.plexus.util.StringUtils;
 
 /**
@@ -408,31 +407,26 @@
             {
                 filteredOutputDirectory.mkdirs();
             }
-            XmlStreamReader xmlStreamReader = null;
             try
             {
                 // so we get encoding from the file itself
-                xmlStreamReader = new XmlStreamReader( changesXml );
-                String encoding = xmlStreamReader.getEncoding();
-                File resultFile = new File( filteredOutputDirectory,
+                try ( XmlStreamReader xmlStreamReader = new XmlStreamReader( changesXml ) )
+                {
+                    String encoding = xmlStreamReader.getEncoding();
+                    File resultFile = new File( filteredOutputDirectory,
                                             project.getGroupId() + "." + project.getArtifactId() + "-changes.xml" );
 
-                final MavenFileFilterRequest mavenFileFilterRequest =
-                    new MavenFileFilterRequest( changesXml, resultFile, true, project, Collections.<String>emptyList(),
-                                                false, encoding, session, additionalProperties );
-                mavenFileFilter.copyFile( mavenFileFilterRequest );
-                changesXml = resultFile;
-                xmlStreamReader.close();
-                xmlStreamReader = null;
+                    final MavenFileFilterRequest mavenFileFilterRequest =
+                            new MavenFileFilterRequest( changesXml, resultFile, true, project, 
+                                    Collections.<String>emptyList(), false, encoding, session, additionalProperties );
+                    mavenFileFilter.copyFile( mavenFileFilterRequest );
+                    changesXml = resultFile;
+                }
             }
             catch ( IOException | MavenFilteringException e )
             {
                 throw new MavenReportException( "Exception during filtering changes file : " + e.getMessage(), e );
             }
-            finally
-            {
-                IOUtil.close( xmlStreamReader );
-            }
 
         }
         return new ChangesXML( changesXml, getLog() );
diff --git a/src/main/java/org/apache/maven/plugins/changes/ChangesXML.java b/src/main/java/org/apache/maven/plugins/changes/ChangesXML.java
index ee40e42..5fe7959 100644
--- a/src/main/java/org/apache/maven/plugins/changes/ChangesXML.java
+++ b/src/main/java/org/apache/maven/plugins/changes/ChangesXML.java
@@ -49,7 +49,6 @@
 import org.apache.maven.plugins.changes.model.Properties;
 import org.apache.maven.plugins.changes.model.Release;
 import org.apache.maven.plugins.changes.model.io.xpp3.ChangesXpp3Reader;
-import org.codehaus.plexus.util.IOUtil;
 
 /**
  * A facade for a changes.xml file.
@@ -91,17 +90,15 @@
             return;
         }
 
-        FileInputStream fileInputStream = null;
-
         try
         {
 
             ChangesXpp3Reader reader = new ChangesXpp3Reader();
 
-            fileInputStream = new FileInputStream( xmlPath );
-            changesDocument = reader.read( fileInputStream, false );
-            fileInputStream.close();
-            fileInputStream = null;
+            try ( FileInputStream fileInputStream = new FileInputStream( xmlPath ) )
+            {
+                changesDocument = reader.read( fileInputStream, false );
+            }
 
             if ( changesDocument == null )
             {
@@ -134,10 +131,6 @@
             log.error( "An error occurred when parsing the changes.xml file: ", e );
             throw new ChangesXMLRuntimeException( "An error occurred when parsing the changes.xml file", e );
         }
-        finally
-        {
-            IOUtil.close( fileInputStream );
-        }
     }
 
     /**
diff --git a/src/main/java/org/apache/maven/plugins/changes/schema/DefaultChangesSchemaValidator.java b/src/main/java/org/apache/maven/plugins/changes/schema/DefaultChangesSchemaValidator.java
index a86135b..068f34a 100644
--- a/src/main/java/org/apache/maven/plugins/changes/schema/DefaultChangesSchemaValidator.java
+++ b/src/main/java/org/apache/maven/plugins/changes/schema/DefaultChangesSchemaValidator.java
@@ -56,7 +56,6 @@
     public XmlValidationHandler validateXmlWithSchema( File file, String schemaVersion, boolean failOnValidationError )
         throws SchemaValidatorException
     {
-        Reader reader = null;
         try
         {
             String schemaPath = CHANGES_SCHEMA_PATH + "changes-" + schemaVersion + ".xsd";
@@ -69,12 +68,10 @@
 
             validator.setErrorHandler( baseHandler );
 
-            reader = new XmlStreamReader( file );
-
-            validator.validate( new StreamSource( reader ) );
-
-            reader.close();
-            reader = null;
+            try ( Reader reader = new XmlStreamReader( file ) )
+            {
+                validator.validate( new StreamSource( reader ) );
+            }
 
             return baseHandler;
         }
@@ -90,10 +87,6 @@
         {
             throw new SchemaValidatorException( "Exception : " + e.getMessage(), e );
         }
-        finally
-        {
-            IOUtil.close( reader );
-        }
     }
 
     public Schema getSchema( String schemaPath )
diff --git a/src/main/java/org/apache/maven/plugins/jira/RestJiraDownloader.java b/src/main/java/org/apache/maven/plugins/jira/RestJiraDownloader.java
index 69fa03b..b92e4bd 100644
--- a/src/main/java/org/apache/maven/plugins/jira/RestJiraDownloader.java
+++ b/src/main/java/org/apache/maven/plugins/jira/RestJiraDownloader.java
@@ -143,16 +143,17 @@
             .build();
 
         StringWriter searchParamStringWriter = new StringWriter();
-        JsonGenerator gen = jsonFactory.createGenerator( searchParamStringWriter );
-        gen.writeStartObject();
-        gen.writeStringField( "jql", jqlQuery );
-        gen.writeNumberField( "maxResults", nbEntriesMax );
-        gen.writeArrayFieldStart( "fields" );
-        // Retrieve all fields. If that seems slow, we can reconsider.
-        gen.writeString( "*all" );
-        gen.writeEndArray();
-        gen.writeEndObject();
-        gen.close();
+        try ( JsonGenerator gen = jsonFactory.createGenerator( searchParamStringWriter ) ) 
+        {
+            gen.writeStartObject();
+            gen.writeStringField( "jql", jqlQuery );
+            gen.writeNumberField( "maxResults", nbEntriesMax );
+            gen.writeArrayFieldStart( "fields" );
+            // Retrieve all fields. If that seems slow, we can reconsider.
+            gen.writeString( "*all" );
+            gen.writeEndArray();
+            gen.writeEndObject();
+        }
         client.replacePath( "/rest/api/2/search" );
         client.type( MediaType.APPLICATION_JSON_TYPE );
         client.accept( MediaType.APPLICATION_JSON_TYPE );
@@ -526,12 +527,13 @@
             client.replacePath( "/rest/auth/1/session" );
             client.type( MediaType.APPLICATION_JSON_TYPE );
             StringWriter jsWriter = new StringWriter();
-            JsonGenerator gen = jsonFactory.createGenerator( jsWriter );
-            gen.writeStartObject();
-            gen.writeStringField( "username", jiraUser );
-            gen.writeStringField( "password", jiraPassword );
-            gen.writeEndObject();
-            gen.close();
+            try ( JsonGenerator gen = jsonFactory.createGenerator( jsWriter ) )
+            {
+                gen.writeStartObject();
+                gen.writeStringField( "username", jiraUser ) ;
+                gen.writeStringField( "password", jiraPassword );
+                gen.writeEndObject();
+            }
             Response authRes = client.post( jsWriter.toString() );
             if ( authRes.getStatus() != Response.Status.OK.getStatusCode() )
             {
diff --git a/src/test/java/org/apache/maven/plugins/announcement/AnnouncementMojoTest.java b/src/test/java/org/apache/maven/plugins/announcement/AnnouncementMojoTest.java
index 9280c8c..42346e9 100644
--- a/src/test/java/org/apache/maven/plugins/announcement/AnnouncementMojoTest.java
+++ b/src/test/java/org/apache/maven/plugins/announcement/AnnouncementMojoTest.java
@@ -20,11 +20,10 @@
  */
 
 import java.io.File;
-import java.io.FileReader;
+import java.nio.file.Files;
 
 import org.apache.maven.plugin.testing.AbstractMojoTestCase;
 import org.codehaus.plexus.util.FileUtils;
-import org.codehaus.plexus.util.IOUtil;
 
 /**
  * @author Olivier Lamy
@@ -62,10 +61,7 @@
         setVariableValueToObject( mojo, "introduction", "Nice library" );
         mojo.execute();
 
-        FileReader fileReader = new FileReader( new File( announcementDirectory, "announcement.vm" ) );
-        String result = IOUtil.toString( fileReader );
-
-        fileReader.close();
+        String result = new String( Files.readAllBytes( announcementDirectory.toPath().resolve( "announcement.vm" ) ) );
 
         assertContains( "Nice library", result );
 
diff --git a/src/test/java/org/apache/maven/plugins/changes/FeedGeneratorTest.java b/src/test/java/org/apache/maven/plugins/changes/FeedGeneratorTest.java
index 9bbd005..d3e1a2e 100644
--- a/src/test/java/org/apache/maven/plugins/changes/FeedGeneratorTest.java
+++ b/src/test/java/org/apache/maven/plugins/changes/FeedGeneratorTest.java
@@ -29,7 +29,6 @@
 
 import junit.framework.TestCase;
 
-import org.apache.maven.plugins.changes.FeedGenerator;
 import org.apache.maven.plugins.changes.model.Release;
 
 /**
@@ -94,12 +93,13 @@
 
         for ( String type : generator.getSupportedFeedTypes() )
         {
-            Writer writer = new StringWriter( 512 );
-            generator.export( releases, type, writer );
-            String result = writer.toString(); // TODO: save for inspection?
-            assertNotNull( result );
-            assertTrue( result.length() > 0 );
-            writer.close();
+            try ( Writer writer = new StringWriter( 512 ) )
+            {
+                generator.export( releases, type, writer );
+                String result = writer.toString(); // TODO: save for inspection?
+                assertNotNull( result );
+                assertTrue( result.length() > 0 );
+            }
         }
     }
 }
diff --git a/src/test/java/org/apache/maven/plugins/jira/JiraUnicodeTestCase.java b/src/test/java/org/apache/maven/plugins/jira/JiraUnicodeTestCase.java
index 22a9f92..76d5be6 100644
--- a/src/test/java/org/apache/maven/plugins/jira/JiraUnicodeTestCase.java
+++ b/src/test/java/org/apache/maven/plugins/jira/JiraUnicodeTestCase.java
@@ -59,12 +59,9 @@
         repoSession.setLocalRepositoryManager( new SimpleLocalRepositoryManager( "target/local-repo" ) );
         setVariableValueToObject( mojo, "project", project );
         setVariableValueToObject( mojo, "mavenSession", session );
-        InputStream testJiraXmlStream = JiraUnicodeTestCase.class.getResourceAsStream( "unicode-jira-results.xml" );
         String jiraXml;
-        try {
+        try (InputStream testJiraXmlStream = JiraUnicodeTestCase.class.getResourceAsStream( "unicode-jira-results.xml" ) ) {
             jiraXml = IOUtils.toString(testJiraXmlStream, UTF_8 );
-        } finally {
-            testJiraXmlStream.close();
         }
 
         MockJiraDownloader mockDownloader = new MockJiraDownloader();