26

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

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

4

5 回答 5

42

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

于 2012-08-27T13:40:38.510 回答
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>

反过来不行。

于 2016-11-30T06:55:39.943 回答
4

就我而言,只使用库:

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

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

于 2012-08-27T13:39:28.293 回答
0

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

于 2018-02-22T09:49:15.327 回答
0

就我而言,我使用以下顺序。与 JDK6 配合得很好。

<dependency>
    <groupId>javax.mail</groupId>
    <artifactId>mail</artifactId>
    <version>1.4</version>
    <scope>provided</scope>
    <exclusions>
        <exclusion>
            <groupId>javax.activation</groupId>
            <artifactId>activation</artifactId>
        </exclusion>
    </exclusions>
</dependency>

<dependency>
    <groupId>javaee</groupId>
    <artifactId>javaee-api</artifactId>
    <version>5</version>
    <scope>provided</scope>
</dependency>
于 2019-10-02T16:30:31.643 回答