我的webapp如何识别Tomcat库中的JAR

时间:2013-11-08 00:45:46

标签: java eclipse maven tomcat javamail

我目前正在开发一个发送电子邮件的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,我如何使用负责发送电子邮件的类?

1 个答案:

答案 0 :(得分:6)

provided中将特定依赖关系的范围标记为pom.xml

<scope>provided</scope>
  

提供

     

这很像编译,但表示您期望JDK   或者在运行时提供依赖性的容器。例如,何时   您可以为Java Enterprise Edition构建Web应用程序   设置对Servlet API和相关Java EE API的依赖   提供范围是因为Web容器提供了这些类。这个   scope仅在编译和测试类路径上可用,并且是   不是过渡性的。

这样的依赖项不会与您的应用程序一起打包导出,因为假设将部署应用程序的容器提供它。 official documentation中有更多信息。