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

我对javaee Bibliothek有一个maven依赖。

 javax javaee-api 6.0 provided  

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

 java.lang.ClassFormatError: Absent Code attribute in method that is not native or abstract in class file javax/mail/MessagingException 

我添加了javax.mail依赖项。

  javax.mail mail 1.4.5  

它没有用。 任何想法??

它不起作用,因为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依赖关系,并从目标应用服务器javax/javaee-api/provided依赖关系中获取这些类。 您可以使用以下示例:

   org.jboss.spec jboss-javaee-6.0 1.0.0.Final pom provided  

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

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

  javax.mail mail 1.4  

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

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

   javax.mail mail 1.4   javax javaee-web-api 6.0 provided  

反过来不行。

如果你按照这个顺序将它们添加到你的pom:javax.mail javaee-web-api它的工作原理是非常合乎逻辑的,因为运行时首先从javax.mail中找到必要的类(使用正确的实现),忽略任何类似的来自javaee-web-api的class(没有实现)。