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

Author: Kayser, 2012-08-27

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 .

 35
Author: Mikko Maunu,
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

 4
Author: Manu Navarro,
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á.

 4
Author: prayagupd,
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.

 0
Author: Sorin-Alexandru Cristescu,
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