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

Fel*_*eão 1 java eclipse tomcat jakarta-mail maven

我目前正在开发一个发送电子邮件的java webapp.由于我在Tomcat 7上部署它,因此我mail/Session在我的context.xml文件上配置了Resource ,并将最新版本复制mail.jar到Tomcat的lib文件夹中.

当我部署我的Web应用程序并运行它时,我得到以下异常:

java.lang.ClassCastException: javax.mail.Session cannot be cast to javax.mail.Session
Run Code Online (Sandbox Code Playgroud)

这是我用来在我班上发送电子邮件的代码:

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);
Run Code Online (Sandbox Code Playgroud)

我知道这可能是因为我mail.jar在Tomcat lib文件夹和我的web app lib文件夹中都有,我的问题是我不能简单地从Maven中删除依赖项pom.xml,因为如果我这样做,Eclipse会说它找不到某些类(如Session).

如果我的webapp中没有相应的JAR,我该如何使用负责发送电子邮件的类?

Nis*_*hth 6

具体的依赖性,马克范围providedpom.xml:

<scope>provided</scope>
Run Code Online (Sandbox Code Playgroud)

提供

这很像compile,但表示您希望JDK或容器在运行时提供依赖性.例如,在为Java Enterprise Edition构建Web应用程序时,您可以将Servlet API和相关Java EE API的依赖关系设置为提供的范围,因为Web容器提供了这些类.此范围仅在编译和测试类路径中可用,并且不可传递.

这样的依赖项不会与您的应用程序一起打包导出,因为假定将部署应用程序的容器提供它.官方文档中提供了更多信息.