Java.lang.ClassFormatError: attribut de Code Absent dans la méthode qui n'est pas native ou abstraite 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é javax.dépendance au courrier.
<dependency>
<groupId>javax.mail</groupId>
<artifactId>mail</artifactId>
<version>1.4.5</version>
</dependency>
Cela n'a pas fonctionné. Une Idée??
4 réponses
Cela ne fonctionne pas car les classes de la dépendance javax/javaee-api/provided
sont spécialement construites. Ils ne sont pas utilisables car l'implémentation des méthodes est manquante.
Ajouter simplement des classes de javax.mail/mail/1.4.5
dépendance au classpath n'aide pas, car les classes de javax/javaee-api/provided
sont déjà là. Avoir javax.mail/mail/1.4.5
dependecy seul résout votre problème, mais très probablement vous avez également besoin d'autres classes de javax/javaee-api/provided
.
Ce que vous pouvez faire est de se débarrasser de javax/javaee-api/provided
dépendance et d'obtenir ces classes par exemple à partir des dépendances fournies par le serveur d'applications cible. Vous pouvez utiliser par exemple:
<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>
Parce que la portée est fournie, elle n'affecte pas l'artefact à construire. C'est pourquoi vous pouvez l'utiliser également avec d'autres serveurs d'applications que JBoss. C'est la même API que dans votre dépendance d'origine, mais elle contient des classes normales .
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
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.
Si vous les ajoutez à votre pom dans cet ordre: javax.courrier javaee-web-api il est assez logique que cela fonctionne, car le runtime trouve d'abord la classe nécessaire (avec l'implémentation appropriée) à partir de javax.mail, ignorant toute classe similaire (sans implémentation) de javaee-web-api.