web-dev-qa-db-fra.com

java.lang.ClassFormatError: attribut Code absent dans la méthode qui n'est pas natif ou abstrait dans le fichier de classe javax/mail/MessagingException

J'ai une dépendance maven pour javaee Bibliothek. 

<dependency>
    <groupId>javax</groupId>
    <artifactId>javaee-api</artifactId>
    <version>6.0</version>
    <scope>provided</scope>
</dependency>

Je reçois l'erreur dans Eclipse dans certaines classes.

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

J'ai ajouté la dépendance javax.mail. 

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

Cela n'a pas fonctionné. Une idée??

24
Kayser

Cela ne fonctionne pas car les classes de la dépendance javax/javaee-api/provided sont spécialement construites. Ils ne sont pas utilisables à l'exécution, car l'implémentation des méthodes est manquante. 

Ajouter simplement des classes de dépendance javax.mail/mail/1.4.5 au chemin de classe n'aide pas, car les classes de javax/javaee-api/provided sont déjà présentes. La dépendance à javax.mail/mail/1.4.5 à elle seule résout votre problème, mais vous avez probablement aussi besoin d'autres classes à partir de javax/javaee-api/provided.

Ce que vous pouvez faire est de vous débarrasser de la dépendance javax/javaee-api/provided et d'obtenir ces classes, par exemple, des dépendances fournies par le serveur d'applications cible. Vous pouvez utiliser par exemple les éléments suivants:

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

Étant donné que la portée est fournie, cela n'affecte pas l'artefact à construire. C'est pourquoi vous pouvez également utiliser celui-ci avec d'autres serveurs d'applications que JBoss. C'est la même API que dans votre dépendance d'origine, mais elle contient normal classes.

36
Mikko Maunu

dans mon cas, utilisez uniquement la bibliothèque:

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

Exécuter avec JDK 6 et Tomcat sans problèmes

4
Manu Navarro

Bizarre mais l'ordre suivant fonctionne pour moi, 

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

L'inverse ne fonctionnera pas.

4
prayagupd

Si vous les ajoutez à votre pom dans l’ordre suivant: ) de javax.mail, en ignorant toute classe similaire (sans implémentation) de javaee-web-api.

0