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

时间:2012-08-27 13:24:29

标签: 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>

我在某些类中遇到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>

它没有用。任何想法??

5 个答案:

答案 0 :(得分:37)

它不起作用,因为来自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相同,但它包含普通类。

答案 1 :(得分:4)

在我的情况下,只使用库:

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

使用JDK 6和Tomcat运行没有问题

答案 2 :(得分:4)

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

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

反过来不起作用。

答案 3 :(得分:0)

如果按此顺序将它们添加到您的pom: javax.mail JavaEE的-Web的API 它是否合乎逻辑,因为运行时首先从javax.mail中找到必要的类(使用正确的实现),忽略来自javaee-web-api的任何类似的类(没有实现)。

答案 4 :(得分:0)

就我而言,我使用以下命令。与JDK6一起很好地工作。

    export interface State extends EntityState<string> {
      showRegistrations: boolean,
      loading: boolean,
      loaded: boolean,
    }

    export const adapter: EntityAdapter<string> = createEntityAdapter<string>({
      selectId: (item: string) => item,
      sortComparer: false,
    });

    export const initialState: State = adapter.getInitialState({
      showRegistrations: true,
      loading: false,
      loaded: false,
    });