Java.lang.ClassFormatError: Atributo de código ausente en el método que no es nativo o abstracto en el archivo de clase javax / mail / MessagingException
Tengo una dependencia maven para javaee Bibliothek.
<dependency>
<groupId>javax</groupId>
<artifactId>javaee-api</artifactId>
<version>6.0</version>
<scope>provided</scope>
</dependency>
Recibo 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
He añadido javax.dependencia del correo.
<dependency>
<groupId>javax.mail</groupId>
<artifactId>mail</artifactId>
<version>1.4.5</version>
</dependency>
No funcionó. Alguna Idea??
4 answers
No funciona porque las clases de la dependencia javax/javaee-api/provided
están construidas especialmente. No son tiempo de ejecución utilizable porque falta la implementación de métodos.
Simplemente agregar clases de javax.mail/mail/1.4.5
dependencia al classpath no ayuda, porque las clases de javax/javaee-api/provided
ya están allí. Tener javax.mail/mail/1.4.5
dependecy solo 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 javax/javaee-api/provided
dependencia y obtener estas clases, por ejemplo desde las dependencias proporcionadas por el servidor de aplicaciones de destino. Puedes 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 alcance, no afecta al artefacto a construir. Es por eso que puede usar este también con otros servidores de aplicaciones que no sean JBoss. Es la misma API que en su dependencia original, pero contiene clases normales .
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2014-09-02 17:07:34
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
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2012-08-27 13:39:28
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>
El reverso no funcionará.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-11-30 06:55:39
Si los añades a tu pom en este orden: javax.correo 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 clase similar (sin implementación) de javaee-web-api.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-02-22 09:49:15