1

私は現在、電子メールを送信するJava webappを開発しています。Tomcat 7 にデプロイしているのでmail/Session、ファイルにリソースを構成し、 Tomcat の lib フォルダーにcontext.xml最新バージョンをコピーしました。mail.jar

Web アプリをデプロイして実行すると、次の例外が発生します。

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);

mail.jarTomcat lib フォルダーと Web アプリ lib フォルダーの両方にあるため、これがおそらくスローされていることを理解しています。問題は、Maven から依存関係を単純に削除できないpom.xmlことです。特定のクラス ( などSession) が見つかりません。

Web アプリケーションに対応する JAR がない場合、電子メールの送信を担当するクラスを使用するにはどうすればよいですか?

4

1 に答える 1

6

次のように、特定の依存関係の範囲をマークprovidedpom.xmlます。

<scope>provided</scope>

提供された

これはコンパイルによく似ていますが、JDK またはコンテナーが実行時に依存関係を提供することを期待していることを示します。たとえば、Java Enterprise Edition 用の Web アプリケーションを構築する場合、サーブレット API および関連する Java EE API への依存関係を提供範囲に設定します。これは、Web コンテナーがこれらのクラスを提供するためです。このスコープは、コンパイルおよびテスト クラスパスでのみ使用でき、推移的ではありません。

このような依存関係は、エクスポート時にアプリケーションと一緒にパッケージ化されません。これは、アプリが展開されるコンテナーがそれを提供すると想定されているためです。詳細については、公式ドキュメントを参照してください。

于 2013-11-08T00:49:58.743 に答える