我目前正在开发一个发送电子邮件的java webapp。由于我在Tomcat 7上部署它,因此我在mail/Session
文件上配置了资源context.xml
,并将最新版本的mail.jar
复制到Tomcat的lib文件夹中。
当我部署我的网络应用并运行它时,我得到以下异常:
java.lang.ClassCastException: javax.mail.Session cannot be cast to javax.mail.Session
这是我用来在班上发送电子邮件的代码:
Context initCtx = new InitialContext();
Context envCtx = (Context) initCtx.lookup("java:comp/env");
Session session = (Session) envCtx.lookup("mail/Session");
Message message = new MimeMessage(session);
message.setFrom(new InternetAddress(from));
InternetAddress toIA[] = new InternetAddress[1];
toIA[0] = new InternetAddress(to);
message.setRecipients(Message.RecipientType.TO, toIA);
message.setSubject(subject);
message.setContent(mensagem, "text/plain");
Transport.send(message);
我理解这可能是因为我在Tomcat lib文件夹和我的web app lib文件夹中都有mail.jar
,问题是我不能简单地从Maven的{{1因为如果我这样做,Eclipse会说它找不到某些类(例如pom.xml
)。
如果我的网络应用程序中没有相应的JAR,我如何使用负责发送电子邮件的类?
答案 0 :(得分:6)
在provided
中将特定依赖关系的范围标记为pom.xml
:
<scope>provided</scope>
提供
这很像编译,但表示您期望JDK 或者在运行时提供依赖性的容器。例如,何时 您可以为Java Enterprise Edition构建Web应用程序 设置对Servlet API和相关Java EE API的依赖 提供范围是因为Web容器提供了这些类。这个 scope仅在编译和测试类路径上可用,并且是 不是过渡性的。
这样的依赖项不会与您的应用程序一起打包导出,因为假设将部署应用程序的容器提供它。 official documentation中有更多信息。