2011-12-13 7 views
5

Viene visualizzato l'errore di eclipse quando si tenta di richiamare un codice funzionante al 100%. Ad esempio, sta lavorando nei miei netbeans ma non in questo progetto di eclissi. L'errore è assurdo e sono quasi sicuro che sia causato da una dipendenza Maven per OPEN JPA che sto usando. Qualche indicazione?Errore JPA ClassFormat "Attributo Codice assente nel metodo che non è nativo o astratto nel file di classe javax/persistence/Persistenza"

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

L'errore si verifica nell'ultima riga, e l'errore è:

ClassFormat errore "attributo Codice Assente in metodo che non è nativo o astratta nel file di classe javax/persistenza/Persistenza"

+0

Vedere http://maven.40175.n5.nabble.com/Problem-running-unit-tests-da-maven-JPA-related-td126893.html per una soluzione consigliata. –

+0

La soluzione consigliata in questo caso, openejb -javaee 6.0, non esiste (almeno non la versione 6). Penso che il problema abbia una soluzione simile ma non riesco a trovarlo – SQC

+0

Ho javaee6.0.jar, quindi penso che ci sia qualcos'altro che sta succedendo – SQC

risposta

3

Quello che sta succedendo è che i tuoi riferimenti pom javaee-api. Questo pacchetto non fornisce i corpi dei metodi, solo le intestazioni. È effettivamente un pacchetto danneggiato che viene "riparato" in fase di esecuzione quando viene distribuito in un ambiente JavaEE.

NetBeans fornisce un'implementazione reale di javaee mentre Eclipse no. Per risolvere questo componente aggiuntivo:

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

Ciò fornirà le necessarie implementazioni di javax.persistence e il codice funzionerà.

9

Se si dispone di una dipendenza JavaEE nel pom come

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

mossa fino alla fine delle vostre dipendenze. La tua dipendenza JPA deve arrivare prima della dipendenza di javaee o otterrai questo errore.

+1

È bello sapere che devo spostare javaee-web-api fino alla fine. Grazie –

Problemi correlati