Javaee BibliothekのMaven依存関係があります。
<dependency>
<groupId>javax</groupId>
<artifactId>javaee-api</artifactId>
<version>6.0</version>
<scope>provided</scope>
</dependency>
一部のクラスのEclipseでエラーが発生します。
Java.lang.ClassFormatError: Absent Code attribute in method that is not native or abstract in class file javax/mail/MessagingException
Javax.mail依存関係を追加しました。
<dependency>
<groupId>javax.mail</groupId>
<artifactId>mail</artifactId>
<version>1.4.5</version>
</dependency>
うまくいきませんでした。何か案が??
javax/javaee-api/provided
依存関係のクラスは特別に構築されているため、機能しません。メソッドの実装が欠落しているため、使用可能なランタイムではありません。
javax.mail/mail/1.4.5
依存関係からクラスをクラスパスに追加するだけでは、javax/javaee-api/provided
からのクラスが既に存在するため、役に立ちません。 javax.mail/mail/1.4.5
に依存するだけで問題は解決しますが、ほとんどの場合、javax/javaee-api/provided
の他のクラスも必要です。
できることは、javax/javaee-api/provided
依存関係を取り除き、たとえばターゲットアプリケーションサーバーによって提供される依存関係からこれらのクラスを取得することです。たとえば、次を使用できます。
<dependency>
<groupId>org.jboss.spec</groupId>
<artifactId>jboss-javaee-6.0</artifactId>
<version>1.0.0.Final</version>
<type>pom</type>
<scope>provided</scope>
</dependency>
スコープが提供されるため、ビルドされるアーティファクトには影響しません。これが、JBoss以外の他のアプリケーションサーバーでもこれを使用できる理由です。元の依存関係と同じAPIですが、normalクラスが含まれています。
私の場合、ライブラリのみを使用します:
<dependency>
<groupId>javax.mail</groupId>
<artifactId>mail</artifactId>
<version>1.4</version>
</dependency>
JDK 6とTomcatを問題なく実行
奇妙なことですが、次の順序でうまくいきます。
<dependency>
<groupId>javax.mail</groupId>
<artifactId>mail</artifactId>
<version>1.4</version>
</dependency>
<dependency>
<groupId>javax</groupId>
<artifactId>javaee-web-api</artifactId>
<version>6.0</version>
<scope>provided</scope>
</dependency>
逆は機能しません。
Javax.mail javaee-web-apiの順序でこれらをpomに追加する場合、ランタイムはjavax.mailから必要なクラスを最初に(適切な実装で)見つけるため、動作するのはかなり論理的です。 javaee-web-apiのクラス(実装なし)。