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,我该如何使用负责发送电子邮件的类?
具体的依赖性,马克范围provided
在pom.xml
:
<scope>provided</scope>
Run Code Online (Sandbox Code Playgroud)
提供
这很像compile,但表示您希望JDK或容器在运行时提供依赖性.例如,在为Java Enterprise Edition构建Web应用程序时,您可以将Servlet API和相关Java EE API的依赖关系设置为提供的范围,因为Web容器提供了这些类.此范围仅在编译和测试类路径中可用,并且不可传递.
这样的依赖项不会与您的应用程序一起打包导出,因为假定将部署应用程序的容器提供它.官方文档中提供了更多信息.
归档时间: |
|
查看次数: |
162 次 |
最近记录: |