4

这只是一个由 Maven 构建的普通 JPA 控制台。我有一个非常烦人的异常

java.lang.ClassNotFoundException: javax.persistence.Persistence

我找到了一些关于此类问题的解决方案,他们建议将javaee-api lib 添加到 pom.xml。但是错误仍然存​​在于 javee-api lib

import javax.persistence.EntityManager;
import javax.persistence.EntityTransaction;
import javax.persistence.EntityManagerFactory;
import javax.persistence.Persistence;

public class App 
{
    public static void main( String[] args )
    {
        // This line causes error
        EntityManagerFactory entityManagerFactory =
                    Persistence.createEntityManagerFactory("testjpa");
        // It works when I comment above line and print hello
    }
}

所以我很确定异常与库问题无关,persistence.xml 文件可能会导致问题。

这是我的项目树

├── pom.xml
└── src
    ├── main
    │   ├── java
    │   │   └── com
    │   │       └── hoan
    │   │           ├── App.java
    │   │           └── Customer.java
    │   └── resources
    │       └── META-INF
    │           └── persistence.xml
    └── test

我的persistence.xml

<persistence-unit name="testjpa" transaction-type="RESOURCE_LOCAL">

    <provider>org.apache.openjpa.persistence.PersistenceProviderImpl</provider>

    <class>com.foo.Customer</class>

    <properties>
        <property name="javax.persistence.jdbc.driver" 
                  value="com.mysql.jdbc.Driver"/>
        <property name="javax.persistence.jdbc.url"
                  value="jdbc:mysql://localhost:3306/quickstart">
        <property name="javax.persistence.jdbc.user" value="root" />
        <property name="javax.persistence.jdbc.password" value="password"/>
    </properties>

</persistence-unit>

pom.xml 依赖项

<dependency>
    <groupId>org.apache.openjpa</groupId>
    <artifactId>openjpa-all</artifactId>
    <version>2.0.0</version>
</dependency>

<dependency>
    <groupId>mysql</groupId>
    <artifactId>mysql-connector-java</artifactId>
    <version>5.1.22</version>
</dependency>

顺便说一句,我遵循了这个线程“EntityManager 没有持久性提供程序”错误,这与我的问题完全相同,但似乎没有任何效果。

有什么问题?

更新:命令行运行jar文件

java -cp target/jpa-demo.jar com.foo.App
4

2 回答 2

1

将缺少的依赖项添加到您的 pom.xml

    <dependency>
      <groupId>javax.persistence</groupId>
      <artifactId>persistence-api</artifactId>
      <version>1.0</version>
    </dependency>

为什么它在 eclipse 中运行?

我不是 eclipse 上瘾者,但我知道您可以轻松自定义您的类路径,并且它不会与您的 pom 文件保持同步。因此,eclipse 使用的类路径很有可能与 maven 类路径不匹配。

于 2013-02-09T13:03:43.393 回答
0

将此 jar 添加到构建路径链接中

虽然最好像这样通过maven添加依赖

<dependency>
    <groupId>javax.persistence</groupId>
    <artifactId>persistence-api</artifactId>
    <version>1.0.2</version>
</dependency>

问候安舒尔

于 2013-02-12T07:05:38.600 回答