JPA ClassFormat Ошибка «Отсутствует атрибут кода в методе, который не является собственным или абстрактным в файле класса javax / persistence / Persistence» - PullRequest
5 голосов
/ 13 декабря 2011

Я получаю ошибку от Eclipse, когда пытаюсь вызвать 100% рабочий код. Например, он работает в моем netbeans, но не в этом проекте Eclipse. Ошибка абсурдна, и я почти уверен, что она вызвана некоторой зависимостью Maven для OPEN JPA, которую я использую. Есть указатели?

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 / persistence / Persistence"

Ответы [ 3 ]

13 голосов
/ 14 апреля 2014

Если у вас в pom есть зависимость javaee, например

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

переместите его в конец своих зависимостей. Ваша зависимость JPA должна предшествовать зависимости javaee, иначе вы получите эту ошибку.

3 голосов
/ 25 декабря 2012

Что происходит, так это то, что ваш pom ссылается на javaee-api. Этот пакет не предоставляет тела методов, только заголовки. Это фактически поврежденный пакет, который «исправлен» во время выполнения при развертывании в среде JavaEE.

NetBeans предоставляет реальную реализацию javaee, а Eclipse - нет. Чтобы решить эту проблему, добавьте:

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

Это обеспечит необходимые реализации javax.persistence, и ваш код будет работать.

РЕДАКТИРОВАТЬ: (обновлен отсутствующий артефакт)

<dependency>
    <groupId>org.eclipse.persistence</groupId>
    <artifactId>eclipselink</artifactId>
    <version>2.5.0</version>
</dependency>

выберите последнюю зависимость из здесь

0 голосов
/ 25 декабря 2012

Обычно достаточно загрузить JAR JavaEE напрямую из Oracle:

http://www.mkyong.com/maven/how-to-download-j2ee-api-javaee-jar-from-maven/

...