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(