【问题标题】:JPA ClassFormat Error "Absent Code attribute in method that is not native or abstract in class file javax/persistence/Persistence"JPA ClassFormat 错误“类文件 javax/persistence/Persistence 中非本机或抽象的方法中缺少代码属性”
【发布时间】:2011-12-13 01:49:35
【问题描述】:

当我尝试调用 100% 工作代码时,我从 eclipse 中得到错误。例如,它在我的 netbeans 中工作,但不是这个 eclipse 项目。这个错误很荒谬,我几乎可以肯定它是由我正在使用的 OPEN JPA 的一些 Maven 依赖引起的。任何指针?

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 中非本机或抽象的方法中缺少代码属性”

【问题讨论】:

  • 请参阅maven.40175.n5.nabble.com/… 以获得解决方案建议。
  • 那里推荐的解决方案 openejb -javaee 6.0 不存在(至少不存在版本 6)。我认为问题有类似的解决方案,但似乎找不到它
  • 我有 javaee6.0.jar ,所以我认为还有其他事情发生
  • 您是说您在编译时遇到问题吗?如果是这样,我上面的参考不适用。这解决了运行时问题。此外,那里的解决方案(尽管已有 2 多年的历史)指向 javaee API 的 5.0-1 版本。我认为您可以使用任何当前的 JavaEE 容器。
  • pom.xml 的相关部分更新您的帖子。

标签: java jpa maven openjpa


【解决方案1】:

如果你的 pom 中有 javaee 依赖项

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

将其移至依赖项的末尾。您的 JPA 依赖项必须位于 javaee 依赖项之前,否则您将收到该错误。

【讨论】:

  • 很高兴知道我必须将 javaee-web-api 移动到最后。谢谢
【解决方案2】:

发生的事情是您的 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>

here中选择最新的依赖项

【讨论】:

    【解决方案3】:

    另一种不改变javaee api的替代方案,它是在maven依赖块中首先声明我们需要的真正api,如下所示:

      <dependencies>
        <dependency>
          <groupId>org.hibernate.javax.persistence</groupId>
          <artifactId>hibernate-jpa-2.0-api</artifactId>
          <version>${jpa-api.version}</version>
          <scope>test</scope>
        </dependency>
        <dependency>
          <groupId>org.slf4j</groupId>
          <artifactId>slf4j-jdk14</artifactId>
          <version>{slf4j.version}</version>
          <scope>test</scope>
        </dependency>
        <dependency>
          <groupId>javax.transaction</groupId>
          <artifactId>jta</artifactId>
          <version>${jta.version}</version>
          <scope>test</scope>
        </dependency>
        <dependency>
          <groupId>javaee</groupId>
          <artifactId>javaee-api</artifactId>
          <version>${javaee-api.version}</version>
          <scope>provided</scope>
        </dependency>
    
        <!-- Another tests dependencies-->
        <dependency>
          <groupId>junit</groupId>
          <artifactId>junit</artifactId>
          <version>${junit.version}</version>
          <scope>test</scope>
        </dependency>
        <dependency>
          <groupId>org.assertj</groupId>
          <artifactId>assertj-core</artifactId>
          <version>${assertj-core.version}</version>
          <scope>test</scope>
        </dependency>
        <dependency>
          <groupId>org.mockito</groupId>
          <artifactId>mockito-core</artifactId>
          <version>${mockito-core.version}</version>
          <scope>test</scope>
        </dependency>
      </dependencies>
    

    通过这种方式,我们覆盖了测试范围的类路径。我们可以阅读有关此 maven 行为 herehere 的信息。

    【讨论】:

      【解决方案4】:

      通常直接从 Oracle 下载 JavaEE JAR 就足够了:

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2012-04-22
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-04-03
        • 2012-08-21
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多