2

我正在尝试从同时使用 MailEngine 和 MailServiceUtil 的钩子发送电子邮件,但我还不能发送它。我的代码如下:

InternetAddress from=null;
InternetAddress to=null;
try {
 from = new  InternetAddress("test@test.com", "Admin admin");
 to = new InternetAddress(newUser.getEmailAddress(), newUser.getFirstName());
} catch (UnsupportedEncodingException e) {
 // TODO Auto-generated catch block
 e.printStackTrace();
} 
MailMessage mailMessage = new MailMessage();

mailMessage.setFrom(from);
mailMessage.setTo(to);

mailMessage.setBody(body); 
mailMessage.setSubject(subject);
MailServiceUtil.sendEmail(mailMessage);

在此我收到以下错误,

java.lang.LinkageError: loader constraint violation: when resolving method "com.liferay.portal.kernel.mail.MailMessage.setFrom(Ljavax/mail/internet/InternetAddress;)V" the class loader (instance of org/apache/catalina/loader/WebappClassLoader) of the current class, com/lftechnology/sbworkbench/hooks/createaccount/CustomCreateAccountAction, and the class loader (instance of org/apache/catalina/loader/StandardClassLoader) for resolved class, com/liferay/portal/kernel/mail/MailMessage, have different Class objects for the type javax/mail/internet/InternetAddress used in the signature

我在 liferay 安装中找到了一个 mail.jar 文件,但我无法使用它。我尝试使用 artifactid com.sun 在我的 pom 文件中导入 javax.mail,但仍然出现此错误。这里有人知道问题是什么吗?

谢谢

4

2 回答 2

5

我最好的猜测是您的类路径上有多个版本的 mail.jar(或包含相同代码的各种其他化身)。您说,您在 tomcat 中找到了 mail.jar - 我猜它也包含在您的 web 应用程序的 WEB-INF/lib 中:从那里删除它,您的 webapp 必须使用 tomcat 全局类路径中的那个。

您可以在 Maven 中将依赖项配置为“已提供”,以便 Maven 知道您将依赖该代码,但不会将其与您的应用程序一起部署

提出您的评论:不要只是“重新部署”,而是取消部署(删除 Web 应用程序),否则 tomcat 可能会保留您之前提供的库。因此,您不会再次复制它们,但它们仍然存在。

于 2013-04-03T12:55:19.613 回答
0

我忘记从已部署项目的 WEB-INF 中删除 mail.jar 文件,并且使用设置为提供的依赖项再次部署并不会自动删除该文件。

所以我从 webapp 页面中删除了该项目并重新部署了该项目。因此它奏效了。

于 2013-04-05T07:08:30.790 回答