web-dev-qa-db-ja.com

java.lang.ClassFormatError:クラスファイルjavax / mail / MessagingExceptionにネイティブまたは抽象ではないメソッドのAbsent Code属性

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>

うまくいきませんでした。何か案が??

24
Kayser

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クラスが含まれています。

38
Mikko Maunu

私の場合、ライブラリのみを使用します:

<dependency>
    <groupId>javax.mail</groupId>
    <artifactId>mail</artifactId>
    <version>1.4</version>
</dependency>

JDK 6とTomcatを問題なく実行

4
Manu Navarro

奇妙なことですが、次の順序でうまくいきます。

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

逆は機能しません。

4
prayagupd

Javax.mail javaee-web-apiの順序でこれらをpomに追加する場合、ランタイムはjavax.mailから必要なクラスを最初に(適切な実装で)見つけるため、動作するのはかなり論理的です。 javaee-web-apiのクラス(実装なし)。