2011-12-13 6 views
5

Recibo un error de Eclipse cuando intento invocar un código que funciona al 100%. Está trabajando, por ejemplo, en mi netbeans, pero no en este proyecto de eclipse. El error es absurdo y estoy casi seguro de que es causado por alguna dependencia de Maven para OPEN JPA que estoy usando. ¿Alguna sugerencia?JPA ClassFormat Error "Atributo Código ausente en el método que no es nativo o abstracto en el archivo de clase javax/persistence/Persistence"

Map<String,String> properties = new HashMap<String,String>(); 
properties.put(PersistenceUnitProperties.JDBC_PASSWORD, ""); 
properties.put(PersistenceUnitProperties.JDBC_USER, "root"); 
properties.put(PersistenceUnitProperties.JDBC_URL, "jdbc:mysql://localhost:3306/mydb"); 
properties.put(PersistenceUnitProperties.JDBC_DRIVER, "com.mysql.jdbc.Driver"); 

emf = Persistence.createEntityManagerFactory("Persistentunitname", properties); 

El error se produce en la última línea, y el error es:

ClassFormat error "atributo Código Ausente en un método que no es nativo o resumen en javax archivo de clase/persistencia/Persistencia"

+0

Consulte http://maven.40175.n5.nabble.com/Problem-running-unit-tests-from-maven-JPA-related-td126893.html para obtener una recomendación de solución. –

+0

La solución recomendada allí, openejb -javaee 6.0, no existe (al menos no la versión 6). Creo que el problema tiene una solución similar, pero parece que no puede encontrarlo – SQC

+0

Tengo javaee6.0.jar, así que creo que hay algo más en juego – SQC

Respuesta

3

Lo que está sucediendo es que su pom hace referencia a javaee-api. Este paquete no proporciona cuerpos de método, solo encabezados. En realidad, se trata de un paquete defectuoso que se 'repara' en el tiempo de ejecución cuando se implementa en un entorno JavaEE.

NetBeans proporciona una implementación real de javaee, mientras que Eclipse no lo es. Para resolver este agregar:

<dependency> 
    <groupId>org.eclipse.persistence</groupId> 
    <artifactId>eclipselink</artifactId> 
    <version>2.4.0</version> 
    <scope>compile</scope> 
</dependency> 

Esto proporcionará las implementaciones necesarias de javax.persistence y su código funcionará.

9

Si usted tiene una dependencia JavaEE en su pom como

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

se mueve hacia el final de sus dependencias. Su dependencia de JPA debe venir antes de la dependencia de javaee o obtendrá ese error.

+1

Es genial saber que tengo que mover javaee-web-api hasta el final. Gracias –

Cuestiones relacionadas