it-swarm.com.ru

java.lang.ClassFormatError: отсутствует атрибут кода в методе, который не является собственным или абстрактным в файле класса javax/mail/MessagingException

У меня maven зависимость для javaee Bibliothek. 

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

Это не сработало. Любая идея??

24
Kayser

Это не работает, потому что классы из зависимости 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, что и в исходной зависимости, но он содержит нормальные классы.

36
Mikko Maunu

в моем случае используйте только библиотеку:

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

Запустите с JDK 6 и Tomcat без проблем

4
Manu Navarro

Странно, но следующий порядок работает для меня, 

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

Обратное не сработает.

4
prayagupd

Если вы добавляете их в pom в следующем порядке: Javax.mailjavaee-web-apiit, то вполне логично, что он будет работать, потому что среда выполнения сначала находит необходимый класс (при правильной реализации). ) из javax.mail, игнорируя любой подобный класс (без реализации) из javaee-web-api.

0
Sorin-Alexandru Cristescu