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??
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.
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 l’ordre suivant: ) de javax.mail, en ignorant toute classe similaire (sans implémentation) de javaee-web-api.