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 2021/10/28 14:08:11 UTC

[ant] branch master updated: Use Jakarta EE

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 cd1bb84  Use Jakarta EE
     new 44582f1  Merge pull request #161 from twogee/jakarta-mail
cd1bb84 is described below

commit cd1bb841b12184ea08da2c56b855ecc583aeafb3
Author: twogee <g....@gmail.com>
AuthorDate: Thu Mar 4 14:50:08 2021 +0100

    Use Jakarta EE
---
 build.xml                                          | 13 +++++++
 fetch.xml                                          |  6 +++
 lib/libraries.properties                           |  4 +-
 .../poms/{ant-javamail => ant-jakartamail}/pom.xml | 10 ++---
 src/etc/poms/ant-javamail/pom.xml                  |  4 +-
 src/etc/poms/ant/pom.xml                           |  2 +-
 src/etc/poms/pom.xml                               |  1 +
 .../apache/tools/ant/taskdefs/email/EmailTask.java | 37 +++++++++++++-----
 .../{MimeMailer.java => JakartaMimeMailer.java}    | 44 +++++++++++-----------
 .../tools/ant/taskdefs/email/MimeMailer.java       |  2 +
 .../org/apache/tools/ant/util/ClasspathUtils.java  |  4 ++
 11 files changed, 87 insertions(+), 40 deletions(-)

diff --git a/build.xml b/build.xml
index 35ba766..bc285a8 100644
--- a/build.xml
+++ b/build.xml
@@ -277,6 +277,12 @@
     </or>
   </selector>
 
+  <selector id="needs.jakartamail">
+    <or>
+      <filename name="${ant.package}/taskdefs/email/JakartaMimeMailer*"/>
+    </or>
+  </selector>
+
   <selector id="needs.netrexx">
     <filename name="${optional.package}/NetRexxC*"/>
   </selector>
@@ -360,6 +366,7 @@
         <selector refid="needs.imageio"/>
         <selector refid="needs.jai"/>
         <selector refid="needs.javamail"/>
+        <selector refid="needs.jakartamail"/>
         <selector refid="needs.jdepend"/>
         <selector refid="needs.jmf"/>
         <selector refid="needs.jsch"/>
@@ -507,6 +514,9 @@
     <available property="javamail.present"
                classname="javax.mail.Transport"
                classpathref="classpath" ignoresystemclasses="${ignoresystemclasses}"/>
+    <available property="jakartamail.present"
+               classname="jakarta.mail.Transport"
+               classpathref="classpath" ignoresystemclasses="${ignoresystemclasses}"/>
     <available property="graaljs.present"
                classname="com.oracle.truffle.js.scriptengine.GraalJSScriptEngine"
                classpathref="classpath" ignoresystemclasses="${ignoresystemclasses}"/>
@@ -704,6 +714,7 @@
             <selector refid="needs.commons-logging" unless="commons.logging.present"/>
             <selector refid="needs.apache-bsf" unless="bsf.present"/>
             <selector refid="needs.javamail" unless="javamail.present"/>
+            <selector refid="needs.jakartamail" unless="jakartamail.present"/>
             <selector refid="needs.netrexx" unless="netrexx.present"/>
             <selector refid="needs.commons-net" unless="commons.net.present"/>
             <selector refid="needs.antlr" unless="antlr.present"/>
@@ -867,6 +878,7 @@
     <optional-jar dep="commons-logging"/>
     <optional-jar dep="apache-bsf"/>
     <optional-jar dep="javamail"/>
+    <optional-jar dep="jakartamail"/>
     <optional-jar dep="netrexx"/>
     <optional-jar dep="commons-net"/>
     <optional-jar dep="antlr"/>
@@ -962,6 +974,7 @@
     <optional-src-jar dep="commons-logging"/>
     <optional-src-jar dep="apache-bsf"/>
     <optional-src-jar dep="javamail"/>
+    <optional-src-jar dep="jakartamail"/>
     <optional-src-jar dep="netrexx"/>
     <optional-src-jar dep="commons-net"/>
     <optional-src-jar dep="antlr"/>
diff --git a/fetch.xml b/fetch.xml
index 24e8e6d..288700c 100644
--- a/fetch.xml
+++ b/fetch.xml
@@ -335,6 +335,12 @@ Set -Ddest=LOCATION on the command line
     <f2 project="which"/>
   </target>
 
+  <target name="javamail"
+          description="load Java Mail"
+          depends="init">
+    <f2 project="com.sun.mail" archive="javax.mail"/>
+  </target>
+
   <target name="jakartamail"
           description="load Jakarta Mail"
           depends="init">
diff --git a/lib/libraries.properties b/lib/libraries.properties
index 9cfc168..a8ac229 100644
--- a/lib/libraries.properties
+++ b/lib/libraries.properties
@@ -48,7 +48,9 @@ hamcrest-core.version=1.3
 hamcrest-library.version=${hamcrest-core.version}
 jai-core.version=1.1.3
 jai-codec.version=1.1.3
-jakarta.mail.version=1.6.4
+# Later 1.6 versions call themselves "jakarta.mail" but do not use the namespace yet
+javax.mail.version=1.6.2
+jakarta.mail.version=2.0.1
 jakarta-regexp.version=1.4
 # Later versions of Tomcat provide a jspc task
 jasper-compiler.version=4.1.36
diff --git a/src/etc/poms/ant-javamail/pom.xml b/src/etc/poms/ant-jakartamail/pom.xml
similarity index 92%
copy from src/etc/poms/ant-javamail/pom.xml
copy to src/etc/poms/ant-jakartamail/pom.xml
index edf720a..4d17f87 100644
--- a/src/etc/poms/ant-javamail/pom.xml
+++ b/src/etc/poms/ant-jakartamail/pom.xml
@@ -31,10 +31,10 @@ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/m
   <modelVersion>4.0.0</modelVersion>
   <url>https://ant.apache.org/</url>
   <groupId>org.apache.ant</groupId>
-  <artifactId>ant-javamail</artifactId>
+  <artifactId>ant-jakartamail</artifactId>
   <version>1.10.12-SNAPSHOT</version>
-  <name>Apache Ant + JavaMail</name>
-  <description>implementation of the mail task based on javamail.
+  <name>Apache Ant + JakartaMail</name>
+  <description>implementation of the mail task based on Jakarta EE mail.
     Required to send emails to SMTP servers using user/password combinations
   or to send mail over SSL</description>
   <dependencies>
@@ -49,7 +49,7 @@ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/m
       See https://eclipse-ee4j.github.io/mail/ -->
       <groupId>com.sun.mail</groupId>
       <artifactId>jakarta.mail</artifactId>
-      <version>1.6.4</version>
+      <version>2.0.1</version>
       <scope>compile</scope>
     </dependency>
   </dependencies>
@@ -60,7 +60,7 @@ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/m
         <artifactId>maven-compiler-plugin</artifactId>
         <configuration>
           <includes>
-            <include>org/apache/tools/ant/taskdefs/email/MimeMailer*</include>
+            <include>org/apache/tools/ant/taskdefs/email/JakartaMimeMailer*</include>
           </includes>
         </configuration>
       </plugin>
diff --git a/src/etc/poms/ant-javamail/pom.xml b/src/etc/poms/ant-javamail/pom.xml
index edf720a..d63d787 100644
--- a/src/etc/poms/ant-javamail/pom.xml
+++ b/src/etc/poms/ant-javamail/pom.xml
@@ -48,8 +48,8 @@ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/m
       <!-- This brings in the necessary dependencies.
       See https://eclipse-ee4j.github.io/mail/ -->
       <groupId>com.sun.mail</groupId>
-      <artifactId>jakarta.mail</artifactId>
-      <version>1.6.4</version>
+      <artifactId>javax.mail</artifactId>
+      <version>1.6.2</version>
       <scope>compile</scope>
     </dependency>
   </dependencies>
diff --git a/src/etc/poms/ant/pom.xml b/src/etc/poms/ant/pom.xml
index 371c5db..409a2e7 100644
--- a/src/etc/poms/ant/pom.xml
+++ b/src/etc/poms/ant/pom.xml
@@ -160,7 +160,7 @@
             <exclude>org/apache/tools/ant/launch/</exclude>
             <exclude>org/apache/tools/ant/listener/CommonsLoggingListener*</exclude>
             <exclude>org/apache/tools/ant/listener/Log4jListener*</exclude>
-            <exclude>org/apache/tools/ant/taskdefs/email/MimeMailer*</exclude>
+            <exclude>org/apache/tools/ant/taskdefs/email/*MimeMailer*</exclude>
             <exclude>${modules.exclude}</exclude>
             <exclude>org/apache/tools/ant/taskdefs/optional/NetRexxC*</exclude>
             <exclude>org/apache/tools/ant/taskdefs/optional/Xalan2TraceSupport*</exclude>
diff --git a/src/etc/poms/pom.xml b/src/etc/poms/pom.xml
index 95f54c7..b49c0b2 100644
--- a/src/etc/poms/pom.xml
+++ b/src/etc/poms/pom.xml
@@ -95,6 +95,7 @@
     <module>ant-imageio</module>
     <module>ant-jai</module>
     <module>ant-javamail</module>
+    <module>ant-jakartamail</module>
     <module>ant-jdepend</module>
     <module>ant-jmf</module>
     <module>ant-jsch</module>
diff --git a/src/main/org/apache/tools/ant/taskdefs/email/EmailTask.java b/src/main/org/apache/tools/ant/taskdefs/email/EmailTask.java
index 54f8117..5336d06 100644
--- a/src/main/org/apache/tools/ant/taskdefs/email/EmailTask.java
+++ b/src/main/org/apache/tools/ant/taskdefs/email/EmailTask.java
@@ -449,16 +449,9 @@ public class EmailTask extends Task {
             // prepare for the auto select mechanism
             boolean autoFound = false;
             // try MIME format
-            if (MIME.equals(encoding)
-                 || (AUTO.equals(encoding) && !autoFound)) {
+            if (MIME.equals(encoding) || AUTO.equals(encoding)) {
                 try {
-                    //check to make sure that activation.jar
-                    //and mail.jar are available - see bug 31969
-                    Class.forName("javax.activation.DataHandler");
-                    Class.forName("javax.mail.internet.MimeMessage");
-
-                    mailer = ClasspathUtils.newInstance(
-                            "org.apache.tools.ant.taskdefs.email.MimeMailer",
+                    mailer = ClasspathUtils.newInstance(getMailerImplementation(),
                             EmailTask.class.getClassLoader(), Mailer.class);
                     autoFound = true;
 
@@ -600,6 +593,32 @@ public class EmailTask extends Task {
         }
     }
 
+    private String getMailerImplementation() {
+        //check to make sure that activation.jar
+        //and mail.jar are available - see bug 31969
+        try {
+            Class.forName("jakarta.activation.DataHandler");
+            Class.forName("jakarta.mail.internet.MimeMessage");
+
+            return "org.apache.tools.ant.taskdefs.email.JakartaMimeMailer";
+        } catch (ClassNotFoundException cnfe) {
+            logBuildException("Could not find Jakarta MIME mail: ",
+                    new BuildException(cnfe));
+        }
+
+        try {
+            Class.forName("javax.activation.DataHandler");
+            Class.forName("javax.mail.internet.MimeMessage");
+
+            return "org.apache.tools.ant.taskdefs.email.MimeMailer";
+        } catch (ClassNotFoundException cnfe) {
+            logBuildException("Could not find MIME mail: ",
+                    new BuildException(cnfe));
+        }
+
+        return "org.apache.tools.ant.taskdefs.email.Mailer";
+    }
+
     private void logBuildException(String reason, BuildException e) {
         Throwable t = e.getCause() == null ? e : e.getCause();
         log(reason + t.getMessage(), Project.MSG_WARN);
diff --git a/src/main/org/apache/tools/ant/taskdefs/email/MimeMailer.java b/src/main/org/apache/tools/ant/taskdefs/email/JakartaMimeMailer.java
similarity index 92%
copy from src/main/org/apache/tools/ant/taskdefs/email/MimeMailer.java
copy to src/main/org/apache/tools/ant/taskdefs/email/JakartaMimeMailer.java
index 319c1dc..80d3fda 100644
--- a/src/main/org/apache/tools/ant/taskdefs/email/MimeMailer.java
+++ b/src/main/org/apache/tools/ant/taskdefs/email/JakartaMimeMailer.java
@@ -34,32 +34,33 @@ import java.util.Properties;
 import java.util.StringTokenizer;
 import java.util.Vector;
 
-import javax.activation.DataHandler;
-import javax.activation.FileDataSource;
-import javax.mail.Address;
-import javax.mail.Authenticator;
-import javax.mail.Message;
-import javax.mail.MessagingException;
-import javax.mail.PasswordAuthentication;
-import javax.mail.SendFailedException;
-import javax.mail.Session;
-import javax.mail.Transport;
-import javax.mail.internet.AddressException;
-import javax.mail.internet.InternetAddress;
-import javax.mail.internet.MimeBodyPart;
-import javax.mail.internet.MimeMessage;
-import javax.mail.internet.MimeMultipart;
+import jakarta.activation.DataHandler;
+import jakarta.activation.DataSource;
+import jakarta.activation.FileDataSource;
+import jakarta.mail.Address;
+import jakarta.mail.Authenticator;
+import jakarta.mail.Message;
+import jakarta.mail.MessagingException;
+import jakarta.mail.PasswordAuthentication;
+import jakarta.mail.SendFailedException;
+import jakarta.mail.Session;
+import jakarta.mail.Transport;
+import jakarta.mail.internet.AddressException;
+import jakarta.mail.internet.InternetAddress;
+import jakarta.mail.internet.MimeBodyPart;
+import jakarta.mail.internet.MimeMessage;
+import jakarta.mail.internet.MimeMultipart;
 
 import org.apache.tools.ant.BuildException;
 import org.apache.tools.ant.Project;
 
 
 /**
- * Uses the JavaMail classes to send Mime format email.
+ * Uses the JakartaMail classes to send Mime format email.
  *
- * @since Ant 1.5
+ * @since Ant 1.10.12
  */
-public class MimeMailer extends Mailer {
+public class JakartaMimeMailer extends Mailer {
     private static final String SSL_FACTORY = "javax.net.ssl.SSLSocketFactory";
 
     private static final String GENERIC_ERROR =
@@ -70,12 +71,11 @@ public class MimeMailer extends Mailer {
         = System.getProperty("file.encoding");
 
     // To work properly with national charsets we have to use
-    // implementation of interface javax.activation.DataSource
+    // implementation of interface jakarta.activation.DataSource
     /**
      * String data source implementation.
-     * @since Ant 1.6
      */
-    class StringDataSource implements javax.activation.DataSource {
+    class StringDataSource implements DataSource {
         private String data = null;
         private String type = null;
         private String charset = null;
@@ -211,7 +211,7 @@ public class MimeMailer extends Mailer {
                     message.setCharset(charset);
                 }
             }
-            // Using javax.activation.DataSource paradigm
+            // Using jakarta.activation.DataSource paradigm
             final StringDataSource sds = new StringDataSource();
             sds.setContentType(message.getMimeType());
             sds.setCharset(charset);
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 319c1dc..387078b 100644
--- a/src/main/org/apache/tools/ant/taskdefs/email/MimeMailer.java
+++ b/src/main/org/apache/tools/ant/taskdefs/email/MimeMailer.java
@@ -58,7 +58,9 @@ import org.apache.tools.ant.Project;
  * Uses the JavaMail classes to send Mime format email.
  *
  * @since Ant 1.5
+ * @deprecated see org.apache.tools.ant.taskdefs.email.JakartaMimeMailer
  */
+@Deprecated
 public class MimeMailer extends Mailer {
     private static final String SSL_FACTORY = "javax.net.ssl.SSLSocketFactory";
 
diff --git a/src/main/org/apache/tools/ant/util/ClasspathUtils.java b/src/main/org/apache/tools/ant/util/ClasspathUtils.java
index 9e9b2dd..e14ed3e 100644
--- a/src/main/org/apache/tools/ant/util/ClasspathUtils.java
+++ b/src/main/org/apache/tools/ant/util/ClasspathUtils.java
@@ -26,6 +26,7 @@ import org.apache.tools.ant.types.Path;
 import org.apache.tools.ant.types.Reference;
 
 import java.lang.reflect.InvocationTargetException;
+import java.lang.reflect.Modifier;
 
 // CheckStyle:HideUtilityClassConstructorCheck OFF - bc
 
@@ -251,6 +252,9 @@ public class ClasspathUtils {
         try {
             @SuppressWarnings("unchecked")
             Class<T> clazz = (Class<T>) Class.forName(className, true, userDefinedLoader);
+            if (Modifier.isAbstract(clazz.getModifiers())) {
+                throw new BuildException("Abstract class " + className);
+            }
             T o = clazz.getDeclaredConstructor().newInstance();
             if (!expectedType.isInstance(o)) {
                 throw new BuildException(