这只是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>
顺便说一下,我跟着这个线程"No Persistence provider for EntityManager" error,它与我的问题完全一样,但似乎没什么用。
有什么问题?
更新:运行jar文件的命令行
java -cp target/jpa-demo.jar com.foo.App
答案 0 :(得分:1)
将缺少的依赖项添加到pom.xml
<dependency>
<groupId>javax.persistence</groupId>
<artifactId>persistence-api</artifactId>
<version>1.0</version>
</dependency>
为什么它在eclipse中运行?
我不是一个日食瘾君子,但我知道你可以轻松自定义你的类路径,它不会与你的pom文件保持同步。因此,很有可能eclipse使用的类路径与maven类路径不匹配。
答案 1 :(得分:0)
将此jar添加到构建路径link
尽管通过像这样的maven添加依赖性更好
<dependency>
<groupId>javax.persistence</groupId>
<artifactId>persistence-api</artifactId>
<version>1.0.2</version>
</dependency>
此致 Anshul