我对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>
它没有用。任何想法??
答案 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,
});