这只是一个由 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