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.grigelio...@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(