java.lang.ClassFormatError:在类文件 javax/mail/MessagingException 中不是本机或抽象的方法中缺少代码属性

2022-09-01 16:56:33

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

它没有奏效。任何想法??


答案 1

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

简单地将类从依赖项添加到类路径是没有帮助的,因为来自 的类已经存在。仅凭依赖性就可以解决您的问题,但很可能您还需要 来自 的其他类。javax.mail/mail/1.4.5javax/javaee-api/providedjavax.mail/mail/1.4.5javax/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 相同,但它包含普通类。


答案 2

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

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

反之亦然。


推荐