You are viewing a plain text version of this content. The canonical link for it is here.
Posted to notifications@ant.apache.org by bo...@apache.org on 2020/07/29 13:42:08 UTC

[ant] branch master updated: Class.newInstance() is deprecated in Java 9+

This is an automated email from the ASF dual-hosted git repository.

bodewig pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/ant.git


The following commit(s) were added to refs/heads/master by this push:
     new ae0c87b  Class.newInstance() is deprecated in Java 9+
     new 35d9f3b  Merge pull request #133 from twogee/new-instance
ae0c87b is described below

commit ae0c87be2b042203bb24c72722b61f7466273f9e
Author: twogee <g....@gmail.com>
AuthorDate: Sun Jul 26 15:43:47 2020 +0200

    Class.newInstance() is deprecated in Java 9+
---
 .../org/apache/tools/ant/IntrospectionHelper.java     |  5 +++--
 src/main/org/apache/tools/ant/Project.java            |  6 +++---
 src/main/org/apache/tools/ant/filters/SortFilter.java | 10 ++++------
 src/main/org/apache/tools/ant/launch/Launcher.java    |  2 +-
 .../org/apache/tools/ant/taskdefs/AntStructure.java   |  6 ++++--
 src/main/org/apache/tools/ant/taskdefs/JDBCTask.java  |  7 ++++---
 src/main/org/apache/tools/ant/taskdefs/Tar.java       |  2 +-
 .../org/apache/tools/ant/taskdefs/XSLTProcess.java    |  2 +-
 .../apache/tools/ant/taskdefs/compilers/Javac13.java  |  2 +-
 .../apache/tools/ant/taskdefs/email/MimeMailer.java   |  2 +-
 .../tools/ant/taskdefs/launcher/CommandLauncher.java  |  8 +++++---
 .../tools/ant/taskdefs/optional/TraXLiaison.java      |  4 ++--
 .../tools/ant/taskdefs/optional/XMLValidateTask.java  |  6 ++++--
 .../taskdefs/optional/ejb/GenericDeploymentTool.java  |  5 ++---
 .../jsp/compilers/JspCompilerAdapterFactory.java      |  2 +-
 .../ant/taskdefs/optional/junit/FormatterElement.java |  8 ++++----
 .../taskdefs/optional/junit/TearDownOnVmCrash.java    |  2 +-
 .../optional/junitlauncher/LauncherSupport.java       |  2 +-
 .../optional/native2ascii/SunNative2Ascii.java        |  2 +-
 .../apache/tools/ant/types/EnumeratedAttribute.java   |  2 +-
 src/main/org/apache/tools/ant/types/Mapper.java       |  2 +-
 src/main/org/apache/tools/ant/types/XMLCatalog.java   |  2 +-
 .../tools/ant/types/selectors/ExtendSelector.java     |  6 ++++--
 .../selectors/modifiedselector/ModifiedSelector.java  |  2 +-
 .../org/apache/tools/ant/util/ClasspathUtils.java     |  6 ++++--
 .../apache/tools/ant/util/ScriptRunnerCreator.java    |  2 +-
 src/main/org/apache/tools/zip/ExtraFieldUtils.java    | 19 +++++++++++++++++--
 .../ant/types/selectors/PosixGroupSelectorTest.java   |  4 ++--
 28 files changed, 76 insertions(+), 52 deletions(-)

diff --git a/src/main/org/apache/tools/ant/IntrospectionHelper.java b/src/main/org/apache/tools/ant/IntrospectionHelper.java
index 269c55d..d4bf771 100644
--- a/src/main/org/apache/tools/ant/IntrospectionHelper.java
+++ b/src/main/org/apache/tools/ant/IntrospectionHelper.java
@@ -1122,10 +1122,11 @@ public final class IntrospectionHelper {
                 public void set(final Project p, final Object parent, final String value)
                         throws InvocationTargetException, IllegalAccessException, BuildException {
                     try {
-                        final EnumeratedAttribute ea = (EnumeratedAttribute) reflectedArg.newInstance();
+                        final EnumeratedAttribute ea =
+                                (EnumeratedAttribute) reflectedArg.getDeclaredConstructor().newInstance();
                         ea.setValue(value);
                         m.invoke(parent, ea);
-                    } catch (final InstantiationException ie) {
+                    } catch (final InstantiationException | NoSuchMethodException ie) {
                         throw new BuildException(ie);
                     }
                 }
diff --git a/src/main/org/apache/tools/ant/Project.java b/src/main/org/apache/tools/ant/Project.java
index 1d3e692..3f34736 100644
--- a/src/main/org/apache/tools/ant/Project.java
+++ b/src/main/org/apache/tools/ant/Project.java
@@ -271,7 +271,7 @@ public class Project implements ResourceFactory {
     public Project createSubProject() {
         Project subProject = null;
         try {
-            subProject = (getClass().newInstance());
+            subProject = getClass().getDeclaredConstructor().newInstance();
         } catch (final Exception e) {
             subProject = new Project();
         }
@@ -1219,11 +1219,11 @@ public class Project implements ResourceFactory {
             }
             log("Attempting to create object of type " + classname, MSG_DEBUG);
             try {
-                o = Class.forName(classname, true, coreLoader).newInstance();
+                o = Class.forName(classname, true, coreLoader).getDeclaredConstructor().newInstance();
             } catch (final ClassNotFoundException seaEnEfEx) {
                 //try the current classloader
                 try {
-                    o = Class.forName(classname).newInstance();
+                    o = Class.forName(classname).getDeclaredConstructor().newInstance();
                 } catch (final Exception ex) {
                     log(ex.toString(), MSG_ERR);
                 }
diff --git a/src/main/org/apache/tools/ant/filters/SortFilter.java b/src/main/org/apache/tools/ant/filters/SortFilter.java
index a027a5d..d1cb6fd 100644
--- a/src/main/org/apache/tools/ant/filters/SortFilter.java
+++ b/src/main/org/apache/tools/ant/filters/SortFilter.java
@@ -323,19 +323,17 @@ public final class SortFilter extends BaseParamFilterReader
                         String className = param.getValue();
                         @SuppressWarnings("unchecked")
                         final Comparator<? super String> comparatorInstance
-                                = (Comparator<? super String>) (Class.forName(className).newInstance());
+                                = (Comparator<? super String>) (Class.forName(className).getDeclaredConstructor().newInstance());
                         setComparator(comparatorInstance);
-                    } catch (InstantiationException | ClassNotFoundException | IllegalAccessException e) {
-                        /*
-                         * IAE probably means an inner non-static class, that case is not considered
-                         */
-                        throw new BuildException(e);
                     } catch (ClassCastException e) {
                         throw new BuildException("Value of comparator attribute"
                                                  + " should implement"
                                                  + " java.util.Comparator"
                                                  + " interface");
                     } catch (Exception e) {
+                        /*
+                         * IAE probably means an inner non-static class, that case is not considered
+                         */
                         throw new BuildException(e);
                     }
                 }
diff --git a/src/main/org/apache/tools/ant/launch/Launcher.java b/src/main/org/apache/tools/ant/launch/Launcher.java
index 1ff1b07..e10e713 100644
--- a/src/main/org/apache/tools/ant/launch/Launcher.java
+++ b/src/main/org/apache/tools/ant/launch/Launcher.java
@@ -280,7 +280,7 @@ public class Launcher {
         Throwable thrown = null;
         try {
             mainClass = loader.loadClass(mainClassname).asSubclass(AntMain.class);
-            final AntMain main = mainClass.newInstance();
+            final AntMain main = mainClass.getDeclaredConstructor().newInstance();
             main.startAnt(newArgs, null, null);
         } catch (final InstantiationException ex) {
             System.err.println(
diff --git a/src/main/org/apache/tools/ant/taskdefs/AntStructure.java b/src/main/org/apache/tools/ant/taskdefs/AntStructure.java
index 4d8909b..5978ee0 100644
--- a/src/main/org/apache/tools/ant/taskdefs/AntStructure.java
+++ b/src/main/org/apache/tools/ant/taskdefs/AntStructure.java
@@ -22,6 +22,7 @@ import java.io.File;
 import java.io.IOException;
 import java.io.OutputStreamWriter;
 import java.io.PrintWriter;
+import java.lang.reflect.InvocationTargetException;
 import java.nio.charset.StandardCharsets;
 import java.nio.file.Files;
 import java.util.ArrayList;
@@ -318,7 +319,7 @@ public class AntStructure extends Task {
                 } else if (EnumeratedAttribute.class.isAssignableFrom(type)) {
                     try {
                         final EnumeratedAttribute ea =
-                            type.asSubclass(EnumeratedAttribute.class).newInstance();
+                            type.asSubclass(EnumeratedAttribute.class).getDeclaredConstructor().newInstance();
                         final String[] values = ea.getValues();
                         if (values == null || values.length == 0
                             || !areNmtokens(values)) {
@@ -326,7 +327,8 @@ public class AntStructure extends Task {
                         } else {
                             sb.append(Stream.of(values).collect(joinAlts)).append(" ");
                         }
-                    } catch (final InstantiationException | IllegalAccessException ie) {
+                    } catch (final InstantiationException | IllegalAccessException
+                            | NoSuchMethodException | InvocationTargetException ie) {
                         sb.append("CDATA ");
                     }
                 } else if (Enum.class.isAssignableFrom(type)) {
diff --git a/src/main/org/apache/tools/ant/taskdefs/JDBCTask.java b/src/main/org/apache/tools/ant/taskdefs/JDBCTask.java
index a274d38..55e22f6 100644
--- a/src/main/org/apache/tools/ant/taskdefs/JDBCTask.java
+++ b/src/main/org/apache/tools/ant/taskdefs/JDBCTask.java
@@ -18,6 +18,7 @@
 
 package org.apache.tools.ant.taskdefs;
 
+import java.lang.reflect.InvocationTargetException;
 import java.sql.Connection;
 import java.sql.DatabaseMetaData;
 import java.sql.Driver;
@@ -425,7 +426,7 @@ public abstract class JDBCTask extends Task {
                     Project.MSG_VERBOSE);
                 dc = Class.forName(driver).asSubclass(Driver.class);
             }
-            driverInstance = dc.newInstance();
+            driverInstance = dc.getDeclaredConstructor().newInstance();
         } catch (ClassNotFoundException e) {
             throw new BuildException(
                     "Class Not Found: JDBC driver " + driver + " could not be loaded",
@@ -436,9 +437,9 @@ public abstract class JDBCTask extends Task {
                     "Illegal Access: JDBC driver " + driver + " could not be loaded",
                     e,
                     getLocation());
-        } catch (InstantiationException e) {
+        } catch (InstantiationException | NoSuchMethodException | InvocationTargetException e) {
             throw new BuildException(
-                    "Instantiation Exception: JDBC driver " + driver + " could not be loaded",
+                    e.getClass().getSimpleName() + ": JDBC driver " + driver + " could not be loaded",
                     e,
                     getLocation());
         }
diff --git a/src/main/org/apache/tools/ant/taskdefs/Tar.java b/src/main/org/apache/tools/ant/taskdefs/Tar.java
index 1c56a66..76446fd 100644
--- a/src/main/org/apache/tools/ant/taskdefs/Tar.java
+++ b/src/main/org/apache/tools/ant/taskdefs/Tar.java
@@ -1014,7 +1014,7 @@ public class Tar extends MatchingTask {
                     .asSubclass(OutputStream.class);
                 Constructor<? extends OutputStream> c =
                     sClazz.getConstructor(OutputStream.class, fClazz);
-                return c.newInstance(ostream, oClazz.newInstance());
+                return c.newInstance(ostream, oClazz.getDeclaredConstructor().newInstance());
             } catch (ClassNotFoundException ex) {
                 throw new BuildException("xz compression requires the XZ for Java library",
                                          ex);
diff --git a/src/main/org/apache/tools/ant/taskdefs/XSLTProcess.java b/src/main/org/apache/tools/ant/taskdefs/XSLTProcess.java
index 145b04e..237f5d8 100644
--- a/src/main/org/apache/tools/ant/taskdefs/XSLTProcess.java
+++ b/src/main/org/apache/tools/ant/taskdefs/XSLTProcess.java
@@ -702,7 +702,7 @@ public class XSLTProcess extends MatchingTask implements XSLTLogger {
         } else {
             //anything else is a classname
             final Class<? extends XSLTLiaison> clazz = loadClass(proc).asSubclass(XSLTLiaison.class);
-            liaison = clazz.newInstance();
+            liaison = clazz.getDeclaredConstructor().newInstance();
         }
     }
 
diff --git a/src/main/org/apache/tools/ant/taskdefs/compilers/Javac13.java b/src/main/org/apache/tools/ant/taskdefs/compilers/Javac13.java
index 590ec35..1d79ab8 100644
--- a/src/main/org/apache/tools/ant/taskdefs/compilers/Javac13.java
+++ b/src/main/org/apache/tools/ant/taskdefs/compilers/Javac13.java
@@ -52,7 +52,7 @@ public class Javac13 extends DefaultCompilerAdapter {
         // Use reflection to be able to build on all JDKs >= 1.1:
         try {
             Class<?> c = Class.forName("com.sun.tools.javac.Main");
-            Object compiler = c.newInstance();
+            Object compiler = c.getDeclaredConstructor().newInstance();
             Method compile = c.getMethod("compile", String[].class);
             int result = (Integer) compile.invoke(compiler,
                     (Object) cmd.getArguments());
diff --git a/src/main/org/apache/tools/ant/taskdefs/email/MimeMailer.java b/src/main/org/apache/tools/ant/taskdefs/email/MimeMailer.java
index e052e7a..319c1dc 100644
--- a/src/main/org/apache/tools/ant/taskdefs/email/MimeMailer.java
+++ b/src/main/org/apache/tools/ant/taskdefs/email/MimeMailer.java
@@ -151,7 +151,7 @@ public class MimeMailer extends Mailer {
                 try {
                     final Provider p =
                         Class.forName("com.sun.net.ssl.internal.ssl.Provider")
-                            .asSubclass(Provider.class).newInstance();
+                            .asSubclass(Provider.class).getDeclaredConstructor().newInstance();
                     Security.addProvider(p);
                 } catch (final Exception e) {
                     throw new BuildException(
diff --git a/src/main/org/apache/tools/ant/taskdefs/launcher/CommandLauncher.java b/src/main/org/apache/tools/ant/taskdefs/launcher/CommandLauncher.java
index e199569..095ef39 100644
--- a/src/main/org/apache/tools/ant/taskdefs/launcher/CommandLauncher.java
+++ b/src/main/org/apache/tools/ant/taskdefs/launcher/CommandLauncher.java
@@ -22,6 +22,7 @@ import static org.apache.tools.ant.MagicNames.ANT_VM_LAUNCHER_REF_ID;
 
 import java.io.File;
 import java.io.IOException;
+import java.lang.reflect.InvocationTargetException;
 import java.util.Optional;
 
 import org.apache.tools.ant.Project;
@@ -173,10 +174,11 @@ public class CommandLauncher {
         String launcherClass = System.getProperty(launcherRefId);
         if (launcherClass != null) {
             try {
-                return Class.forName(launcherClass)
-                    .asSubclass(CommandLauncher.class).newInstance();
+                return Class.forName(launcherClass).asSubclass(CommandLauncher.class)
+                        .getDeclaredConstructor().newInstance();
             } catch (InstantiationException | IllegalAccessException
-                    | ClassNotFoundException e) {
+                    | ClassNotFoundException
+                    | NoSuchMethodException | InvocationTargetException e) {
                 System.err.println("Could not instantiate launcher class "
                     + launcherClass + ": " + e.getMessage());
             }
diff --git a/src/main/org/apache/tools/ant/taskdefs/optional/TraXLiaison.java b/src/main/org/apache/tools/ant/taskdefs/optional/TraXLiaison.java
index 23db4b0..5b71ae5 100644
--- a/src/main/org/apache/tools/ant/taskdefs/optional/TraXLiaison.java
+++ b/src/main/org/apache/tools/ant/taskdefs/optional/TraXLiaison.java
@@ -332,7 +332,7 @@ public class TraXLiaison implements XSLTLiaison4, ErrorListener, XSLTLoggerAware
                                       Thread.currentThread()
                                       .getContextClassLoader());
                     final XSLTTraceSupport ts =
-                        (XSLTTraceSupport) traceSupport.newInstance();
+                        (XSLTTraceSupport) traceSupport.getDeclaredConstructor().newInstance();
                     ts.configureTrace(transformer, traceConfiguration);
                 } catch (final Exception e) {
                     final String msg = "Failed to enable tracing because of " + e;
@@ -400,7 +400,7 @@ public class TraXLiaison implements XSLTLiaison4, ErrorListener, XSLTLoggerAware
                 if (clazz == null) {
                     clazz = Class.forName(factoryName);
                 }
-                tfactory = (TransformerFactory) clazz.newInstance();
+                tfactory = (TransformerFactory) clazz.getDeclaredConstructor().newInstance();
             } catch (final Exception e) {
                 throw new BuildException(e);
             }
diff --git a/src/main/org/apache/tools/ant/taskdefs/optional/XMLValidateTask.java b/src/main/org/apache/tools/ant/taskdefs/optional/XMLValidateTask.java
index 2edabda..0358bdc 100644
--- a/src/main/org/apache/tools/ant/taskdefs/optional/XMLValidateTask.java
+++ b/src/main/org/apache/tools/ant/taskdefs/optional/XMLValidateTask.java
@@ -19,6 +19,7 @@ package org.apache.tools.ant.taskdefs.optional;
 
 import java.io.File;
 import java.io.IOException;
+import java.lang.reflect.InvocationTargetException;
 import java.nio.file.Files;
 import java.util.Vector;
 
@@ -392,8 +393,9 @@ public class XMLValidateTask extends Task {
                     readerClass = Class.forName(readerClassName);
                 }
 
-                reader = readerClass.newInstance();
-            } catch (ClassNotFoundException | IllegalAccessException | InstantiationException e) {
+                reader = readerClass.getDeclaredConstructor().newInstance();
+            } catch (ClassNotFoundException | IllegalAccessException | InstantiationException
+                    | NoSuchMethodException | InvocationTargetException e) {
                 throw new BuildException(INIT_FAILED_MSG + readerClassName, e);
             }
         }
diff --git a/src/main/org/apache/tools/ant/taskdefs/optional/ejb/GenericDeploymentTool.java b/src/main/org/apache/tools/ant/taskdefs/optional/ejb/GenericDeploymentTool.java
index 21e0882..3ae626e 100644
--- a/src/main/org/apache/tools/ant/taskdefs/optional/ejb/GenericDeploymentTool.java
+++ b/src/main/org/apache/tools/ant/taskdefs/optional/ejb/GenericDeploymentTool.java
@@ -276,9 +276,8 @@ public class GenericDeploymentTool implements EJBDeploymentTool {
 
         try {
             Class<? extends DependencyAnalyzer> analyzerClass =
-                Class.forName(analyzerClassName)
-                    .asSubclass(DependencyAnalyzer.class);
-            dependencyAnalyzer = analyzerClass.newInstance();
+                Class.forName(analyzerClassName).asSubclass(DependencyAnalyzer.class);
+            dependencyAnalyzer = analyzerClass.getDeclaredConstructor().newInstance();
             dependencyAnalyzer.addClassPath(new Path(task.getProject(),
                 config.srcDir.getPath()));
             dependencyAnalyzer.addClassPath(config.classpath);
diff --git a/src/main/org/apache/tools/ant/taskdefs/optional/jsp/compilers/JspCompilerAdapterFactory.java b/src/main/org/apache/tools/ant/taskdefs/optional/jsp/compilers/JspCompilerAdapterFactory.java
index dd2b34f..a894621 100644
--- a/src/main/org/apache/tools/ant/taskdefs/optional/jsp/compilers/JspCompilerAdapterFactory.java
+++ b/src/main/org/apache/tools/ant/taskdefs/optional/jsp/compilers/JspCompilerAdapterFactory.java
@@ -105,7 +105,7 @@ public final class JspCompilerAdapterFactory {
         throws BuildException {
         try {
             Class<? extends JspCompilerAdapter> c = classloader.findClass(className).asSubclass(JspCompilerAdapter.class);
-            return c.newInstance();
+            return c.getDeclaredConstructor().newInstance();
         } catch (ClassNotFoundException cnfe) {
             throw new BuildException(className + " can't be found.", cnfe);
         } catch (ClassCastException cce) {
diff --git a/src/main/org/apache/tools/ant/taskdefs/optional/junit/FormatterElement.java b/src/main/org/apache/tools/ant/taskdefs/optional/junit/FormatterElement.java
index 98bd685..b64f5af 100644
--- a/src/main/org/apache/tools/ant/taskdefs/optional/junit/FormatterElement.java
+++ b/src/main/org/apache/tools/ant/taskdefs/optional/junit/FormatterElement.java
@@ -302,11 +302,11 @@ public class FormatterElement {
 
         JUnitResultFormatterMirror r;
         try {
-            r = f.asSubclass(JUnitResultFormatterMirror.class).newInstance();
+            r = f.asSubclass(JUnitResultFormatterMirror.class).getDeclaredConstructor().newInstance();
         } catch (ClassCastException e) {
-            throw new BuildException("%s is not a JUnitResultFormatter",
-                classname);
-        } catch (InstantiationException | IllegalAccessException e) {
+            throw new BuildException("%s is not a JUnitResultFormatter", classname);
+        } catch (InstantiationException | IllegalAccessException
+                | NoSuchMethodException | InvocationTargetException e) {
             throw new BuildException(e);
         }
 
diff --git a/src/main/org/apache/tools/ant/taskdefs/optional/junit/TearDownOnVmCrash.java b/src/main/org/apache/tools/ant/taskdefs/optional/junit/TearDownOnVmCrash.java
index afc02b3..8a84cbd 100644
--- a/src/main/org/apache/tools/ant/taskdefs/optional/junit/TearDownOnVmCrash.java
+++ b/src/main/org/apache/tools/ant/taskdefs/optional/junit/TearDownOnVmCrash.java
@@ -137,7 +137,7 @@ public class TearDownOnVmCrash implements JUnitResultFormatter {
             try {
                 Method td = testClass.getMethod("tearDown");
                 if (td.getReturnType() == Void.TYPE) {
-                    td.invoke(testClass.newInstance());
+                    td.invoke(testClass.getDeclaredConstructor().newInstance());
                 }
             } catch (NoSuchMethodException nsme) {
                 // no tearDown, fine
diff --git a/src/main/org/apache/tools/ant/taskdefs/optional/junitlauncher/LauncherSupport.java b/src/main/org/apache/tools/ant/taskdefs/optional/junitlauncher/LauncherSupport.java
index 65ba96e..a5ce996 100644
--- a/src/main/org/apache/tools/ant/taskdefs/optional/junitlauncher/LauncherSupport.java
+++ b/src/main/org/apache/tools/ant/taskdefs/optional/junitlauncher/LauncherSupport.java
@@ -293,7 +293,7 @@ public class LauncherSupport {
             throw new BuildException("Listener class " + className + " is not of type " + TestExecutionListener.class.getName());
         }
         try {
-            return (TestExecutionListener) klass.newInstance();
+            return (TestExecutionListener) klass.getDeclaredConstructor().newInstance();
         } catch (Exception e) {
             throw new BuildException("Failed to create an instance of listener " + className, e);
         }
diff --git a/src/main/org/apache/tools/ant/taskdefs/optional/native2ascii/SunNative2Ascii.java b/src/main/org/apache/tools/ant/taskdefs/optional/native2ascii/SunNative2Ascii.java
index 9f9f32f..5e062a3 100644
--- a/src/main/org/apache/tools/ant/taskdefs/optional/native2ascii/SunNative2Ascii.java
+++ b/src/main/org/apache/tools/ant/taskdefs/optional/native2ascii/SunNative2Ascii.java
@@ -55,7 +55,7 @@ public final class SunNative2Ascii extends DefaultNative2Ascii {
         try {
             Class<?> n2aMain = Class.forName(SUN_TOOLS_NATIVE2ASCII_MAIN);
             Method convert = n2aMain.getMethod("convert", String[].class);
-            return Boolean.TRUE.equals(convert.invoke(n2aMain.newInstance(),
+            return Boolean.TRUE.equals(convert.invoke(n2aMain.getDeclaredConstructor().newInstance(),
                 (Object) cmd.getArguments()));
         } catch (BuildException ex) {
             //rethrow
diff --git a/src/main/org/apache/tools/ant/types/EnumeratedAttribute.java b/src/main/org/apache/tools/ant/types/EnumeratedAttribute.java
index 66bf98e..0d5332f 100644
--- a/src/main/org/apache/tools/ant/types/EnumeratedAttribute.java
+++ b/src/main/org/apache/tools/ant/types/EnumeratedAttribute.java
@@ -75,7 +75,7 @@ public abstract class EnumeratedAttribute {
         }
         EnumeratedAttribute ea;
         try {
-            ea = clazz.newInstance();
+            ea = clazz.getDeclaredConstructor().newInstance();
         } catch (Exception e) {
             throw new BuildException(e);
         }
diff --git a/src/main/org/apache/tools/ant/types/Mapper.java b/src/main/org/apache/tools/ant/types/Mapper.java
index 8c40ab9..46dfabf 100644
--- a/src/main/org/apache/tools/ant/types/Mapper.java
+++ b/src/main/org/apache/tools/ant/types/Mapper.java
@@ -231,7 +231,7 @@ public class Mapper extends DataType {
         }
 
         try {
-            FileNameMapper m = getImplementationClass().newInstance();
+            FileNameMapper m = getImplementationClass().getDeclaredConstructor().newInstance();
             final Project p = getProject();
             if (p != null) {
                 p.setProjectReference(m);
diff --git a/src/main/org/apache/tools/ant/types/XMLCatalog.java b/src/main/org/apache/tools/ant/types/XMLCatalog.java
index d5bce33..92943fc 100644
--- a/src/main/org/apache/tools/ant/types/XMLCatalog.java
+++ b/src/main/org/apache/tools/ant/types/XMLCatalog.java
@@ -522,7 +522,7 @@ public class XMLCatalog extends DataType
                 // if it can see it - doesn't use the context loader.
                 clazz = Class.forName(APACHE_RESOLVER, true, baseResolverLoader);
 
-                Object obj  = clazz.newInstance();
+                Object obj  = clazz.getDeclaredConstructor().newInstance();
                 //
                 // Success!  The xml-commons resolver library is
                 // available, so use it.
diff --git a/src/main/org/apache/tools/ant/types/selectors/ExtendSelector.java b/src/main/org/apache/tools/ant/types/selectors/ExtendSelector.java
index 881f3e0..557f438 100644
--- a/src/main/org/apache/tools/ant/types/selectors/ExtendSelector.java
+++ b/src/main/org/apache/tools/ant/types/selectors/ExtendSelector.java
@@ -19,6 +19,7 @@
 package org.apache.tools.ant.types.selectors;
 
 import java.io.File;
+import java.lang.reflect.InvocationTargetException;
 import java.util.ArrayList;
 import java.util.Collections;
 import java.util.List;
@@ -67,7 +68,7 @@ public class ExtendSelector extends BaseSelector {
                             = getProject().createClassLoader(classpath);
                     c = Class.forName(classname, true, al);
                 }
-                dynselector = c.asSubclass(FileSelector.class).newInstance();
+                dynselector = c.asSubclass(FileSelector.class).getDeclaredConstructor().newInstance();
                 final Project p = getProject();
                 if (p != null) {
                     p.setProjectReference(dynselector);
@@ -75,7 +76,8 @@ public class ExtendSelector extends BaseSelector {
             } catch (ClassNotFoundException cnfexcept) {
                 setError("Selector " + classname
                     + " not initialized, no such class");
-            } catch (InstantiationException iexcept) {
+            } catch (InstantiationException | NoSuchMethodException
+                    | InvocationTargetException iexcept) {
                 setError("Selector " + classname
                     + " not initialized, could not create class");
             } catch (IllegalAccessException iaexcept) {
diff --git a/src/main/org/apache/tools/ant/types/selectors/modifiedselector/ModifiedSelector.java b/src/main/org/apache/tools/ant/types/selectors/modifiedselector/ModifiedSelector.java
index 34d2f40..80bf4a6 100644
--- a/src/main/org/apache/tools/ant/types/selectors/modifiedselector/ModifiedSelector.java
+++ b/src/main/org/apache/tools/ant/types/selectors/modifiedselector/ModifiedSelector.java
@@ -407,7 +407,7 @@ public class ModifiedSelector extends BaseExtendSelector
                 clazz = Class.forName(classname);
             }
 
-            Object rv = clazz.newInstance();
+            Object rv = clazz.getDeclaredConstructor().newInstance();
 
             if (!type.isInstance(rv)) {
                 throw new BuildException("Specified class (%s) %s", classname, msg);
diff --git a/src/main/org/apache/tools/ant/util/ClasspathUtils.java b/src/main/org/apache/tools/ant/util/ClasspathUtils.java
index 5016073..9e9b2dd 100644
--- a/src/main/org/apache/tools/ant/util/ClasspathUtils.java
+++ b/src/main/org/apache/tools/ant/util/ClasspathUtils.java
@@ -25,6 +25,8 @@ import org.apache.tools.ant.ProjectComponent;
 import org.apache.tools.ant.types.Path;
 import org.apache.tools.ant.types.Reference;
 
+import java.lang.reflect.InvocationTargetException;
+
 // CheckStyle:HideUtilityClassConstructorCheck OFF - bc
 
 /**
@@ -249,7 +251,7 @@ public class ClasspathUtils {
         try {
             @SuppressWarnings("unchecked")
             Class<T> clazz = (Class<T>) Class.forName(className, true, userDefinedLoader);
-            T o = clazz.newInstance();
+            T o = clazz.getDeclaredConstructor().newInstance();
             if (!expectedType.isInstance(o)) {
                 throw new BuildException(
                     "Class of unexpected Type: %s expected : %s", className,
@@ -261,7 +263,7 @@ public class ClasspathUtils {
         } catch (InstantiationException e) {
             throw new BuildException("Could not instantiate " + className
                     + ". Specified class should have a no " + "argument constructor.", e);
-        } catch (IllegalAccessException e) {
+        } catch (IllegalAccessException | NoSuchMethodException | InvocationTargetException e) {
             throw new BuildException("Could not instantiate " + className
                     + ". Specified class should have a " + "public constructor.", e);
         } catch (LinkageError e) {
diff --git a/src/main/org/apache/tools/ant/util/ScriptRunnerCreator.java b/src/main/org/apache/tools/ant/util/ScriptRunnerCreator.java
index a53be42..26bbd12 100644
--- a/src/main/org/apache/tools/ant/util/ScriptRunnerCreator.java
+++ b/src/main/org/apache/tools/ant/util/ScriptRunnerCreator.java
@@ -127,7 +127,7 @@ public class ScriptRunnerCreator {
         }
         try {
             runner = (ScriptRunnerBase) Class.forName(
-                    runnerClass, true, scriptLoader).newInstance();
+                    runnerClass, true, scriptLoader).getDeclaredConstructor().newInstance();
             runner.setProject(project);
         } catch (Exception ex) {
             throw ReflectUtil.toBuildException(ex);
diff --git a/src/main/org/apache/tools/zip/ExtraFieldUtils.java b/src/main/org/apache/tools/zip/ExtraFieldUtils.java
index f024ab0..ab9a32e 100644
--- a/src/main/org/apache/tools/zip/ExtraFieldUtils.java
+++ b/src/main/org/apache/tools/zip/ExtraFieldUtils.java
@@ -18,6 +18,7 @@
 
 package org.apache.tools.zip;
 
+import java.lang.reflect.InvocationTargetException;
 import java.util.ArrayList;
 import java.util.List;
 import java.util.Map;
@@ -60,7 +61,7 @@ public class ExtraFieldUtils {
      */
     public static void register(Class<?> c) {
         try {
-            ZipExtraField ze = (ZipExtraField) c.newInstance();
+            ZipExtraField ze = (ZipExtraField) c.getDeclaredConstructor().newInstance();
             implementations.put(ze.getHeaderId(), c);
         } catch (ClassCastException cc) {
             throw new RuntimeException(c + " doesn't implement ZipExtraField"); //NOSONAR
@@ -68,6 +69,11 @@ public class ExtraFieldUtils {
             throw new RuntimeException(c + " is not a concrete class"); //NOSONAR
         } catch (IllegalAccessException ie) {
             throw new RuntimeException(c + "'s no-arg constructor is not public"); //NOSONAR
+        } catch (NoSuchMethodException e) {
+            throw new RuntimeException(c + "'s no-arg constructor not found"); //NOSONAR
+        } catch (InvocationTargetException e) {
+            throw new RuntimeException(c + "'s no-arg constructor threw an exception:"
+                    + e.getMessage()); //NOSONAR
         }
     }
 
@@ -84,7 +90,16 @@ public class ExtraFieldUtils {
         throws InstantiationException, IllegalAccessException {
         Class<?> c = implementations.get(headerId);
         if (c != null) {
-            return (ZipExtraField) c.newInstance();
+            // wrap extra exceptions to preserve method signature
+            try {
+                return (ZipExtraField) c.getDeclaredConstructor().newInstance();
+            } catch (InvocationTargetException e) {
+                throw (InstantiationException)
+                        new InstantiationException().initCause(e.getTargetException());
+            } catch (NoSuchMethodException e) {
+                throw (InstantiationException)
+                        new InstantiationException().initCause(e);
+            }
         }
         UnrecognizedExtraField u = new UnrecognizedExtraField();
         u.setHeaderId(headerId);
diff --git a/src/tests/junit/org/apache/tools/ant/types/selectors/PosixGroupSelectorTest.java b/src/tests/junit/org/apache/tools/ant/types/selectors/PosixGroupSelectorTest.java
index 2297082..9c05f7e 100644
--- a/src/tests/junit/org/apache/tools/ant/types/selectors/PosixGroupSelectorTest.java
+++ b/src/tests/junit/org/apache/tools/ant/types/selectors/PosixGroupSelectorTest.java
@@ -71,7 +71,7 @@ public class PosixGroupSelectorTest {
     @Test
     public void posixGroupIsTrueForSelf() throws Exception {
         long gid = (long) jaasProviderClass.getMethod(GROUP_GETTER)
-                .invoke(jaasProviderClass.newInstance());
+                .invoke(jaasProviderClass.getDeclaredConstructor().newInstance());
 
         File file = folder.newFile("f.txt");
         Map<String, Object> fileAttributes = Files.readAttributes(file.toPath(),
@@ -87,7 +87,7 @@ public class PosixGroupSelectorTest {
     @Test
     public void posixGroupFollowSymlinks() throws Exception {
         long gid = (long) jaasProviderClass.getMethod(GROUP_GETTER)
-                .invoke(jaasProviderClass.newInstance());
+                .invoke(jaasProviderClass.getDeclaredConstructor().newInstance());
 
         File target = new File(folder.getRoot(), "link");
         Path symbolicLink = Files.createSymbolicLink(target.toPath(), TEST_FILE.toPath());