javaee groupid ee8 artifactid java java-ee maven java-ee-6

groupid - javaee-api maven



java.lang.ClassFormatError: atributo Ausente de código en el método que no es nativo o abstracto en el archivo de clase javax/mail/MessagingException (4)

Tengo una dependencia de maven para la Biblioteca de Java.

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

Obtengo el error en Eclipse en algunas clases.

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

Agregué la dependencia de javax.mail.

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

No funcionó. ¿¿Alguna idea??


Extraño, pero el siguiente orden funciona para mí,

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

Lo contrario no funcionará.


No funciona porque las clases de la javax/javaee-api/provided están especialmente construidas. No son utilizables en tiempo de ejecución porque falta la implementación de métodos.

Simplemente agregar clases de la javax.mail/mail/1.4.5 al classpath no ayuda, porque las clases de javax/javaee-api/provided ya están allí. Tener solo la dependencia de javax.mail/mail/1.4.5 resuelve su problema, pero lo más probable es que también necesite otras clases de javax/javaee-api/provided .

Lo que puede hacer es deshacerse de la javax/javaee-api/provided y obtener estas clases, por ejemplo, de las dependencias proporcionadas por el servidor de aplicaciones de destino. Puede usar, por ejemplo, lo siguiente:

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

Debido a que se proporciona el alcance, no afecta el artefacto que se construirá. Es por eso que puede usar este también con otros servidores de aplicaciones que JBoss. Es la misma API que en su dependencia original, pero contiene clases normales .


Si los agrega a su pom en este orden: javax.mail javaee-web-api es bastante lógico que funcione, porque el tiempo de ejecución encuentra primero la clase necesaria (con la implementación adecuada) de javax.mail, ignorando cualquier similar clase (sin implementación) de javaee-web-api.


en mi caso, solo use la biblioteca:

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

Ejecutar con JDK 6 y Tomcat sin problemas