2011-12-13 14 views
5

100%作業コードを呼び出そうとするとeclipseからエラーが発生します。これは、例えば、私のネットビーンズで働いていますが、このeclipseプロジェクトではありません。エラーは不条理で、私が使用しているOPEN JPAのいくつかのMaven依存関係によって引き起こされていることはほぼ確実です。すべてのポインタ?JPA ClassFormatエラー "クラスファイルjavax /永続性/永続性にネイティブでないメソッドのコード属性がありません"

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

エラーが最後の行に発生し、エラーは次のとおりです。

ClassFormatエラー「クラスファイルのjavax /持続/持続性にネイティブまたは抽象ではない方法で不在コード属性」

+0

ソリューションの推奨事項については、http://maven.40175.n5.nabble.com/Problem-running-unit-tests-from-maven-JPA-related-td126893.htmlを参照してください。 –

+0

openejb -javaee 6.0という推奨される解決策はありません(少なくともバージョン6ではなく)。私は問題が似たような解決策を持っていると思うが、見つけられないようだ。 – SQC

+0

私はjavaee6.0.jarを持っているので、何か別のものがあると思う。 – SQC

答えて

3

あなたのpomはjavaee-apiを参照しています。このパッケージはメソッド本体を提供せず、ヘッダーだけを提供します。これは事実上、JavaEE環境にデプロイされたときに実行時に「固定」された壊れたパッケージです。

Eclipseはそうではないが、NetBeansはjavaeeの実際の実装を提供している。このアドオンを解決するために:

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

これはのjavax.persistenceの必要な実装を提供し、あなたのコードは動作します。

9

あなたの依存関係の終わりに

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

動き、それをあなたのようなポンポンでのJavaEE依存性を持っている場合。 JPAの依存関係は、javaeeの依存関係の前に来なければなりません。そうしないと、そのエラーが発生します。

+1

私はjavaee-web-apiを最後まで移動しなければならないことを知って嬉しいです。ありがとう –

関連する問題