java.lang.ClassFormatError:在类文件javax/mail/MessagingException中非本机或抽象的方法中的Absent Code属性

Kay*_*ser 24 java java-ee maven java-ee-6

我对javaee Bibliothek有一个maven依赖.

<dependency>
    <groupId>javax</groupId>
    <artifactId>javaee-api</artifactId>
    <version>6.0</version>
    <scope>provided</scope>
</dependency>
Run Code Online (Sandbox Code Playgroud)

我在某些类中遇到了Eclipse中的错误.

java.lang.ClassFormatError: Absent Code attribute in method that is not native or abstract in class file javax/mail/MessagingException
Run Code Online (Sandbox Code Playgroud)

我添加了javax.mail依赖项.

<dependency>
    <groupId>javax.mail</groupId>
    <artifactId>mail</artifactId>
    <version>1.4.5</version>
</dependency>
Run Code Online (Sandbox Code Playgroud)

它没有用.任何的想法??

Mik*_*unu 38

它不起作用,因为javax/javaee-api/provided依赖的类是专门构造的.它们不是可用的运行时因为缺少方法的实现.

简单地将类从javax.mail/mail/1.4.5依赖项添加到类路径也无济于事,因为类javax/javaee-api/provided已经存在.有javax.mail/mail/1.4.5单独dependecy解决您的问题,但最有可能你还需要从其他类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>
Run Code Online (Sandbox Code Playgroud)

由于提供了范围,因此不会影响要构建的工件.这就是为什么你可以将这个应用程序与JBoss之外的其他应用程序服务器一起使用.它与原始依赖项中的API相同,但它包含普通类.


pra*_*upd 6

奇怪,但以下顺序对我有用,

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

反过来不行。

  • 这实际上有效。@prayag upd 您能否发布更多有关它如何工作的详细信息。 (2认同)