Java 为什么在运行JPA时会出现此异常?
这只是Maven构建的普通JPA控制台。我有一个非常恼人的例外Java 为什么在运行JPA时会出现此异常?,java,maven,jpa,Java,Maven,Jpa,这只是Maven构建的普通JPA控制台。我有一个非常恼人的例外 java.lang.ClassNotFoundException: javax.persistence.Persistence 我找到了一些解决这个问题的方法,他们建议在pom.xml中添加javaeeapilib。但是这个错误仍然存在于javeeapi库中 import javax.persistence.EntityManager; import javax.persistence.EntityTransaction; imp
java.lang.ClassNotFoundException: javax.persistence.Persistence
我找到了一些解决这个问题的方法,他们建议在pom.xml中添加javaeeapilib。但是这个错误仍然存在于javeeapi库中
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
My 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>javax.persistence</groupId>
<artifactId>persistence-api</artifactId>
<version>1.0</version>
</dependency>
javax.persistence
持久性api
1
为什么它在eclipse中运行
我不是eclipse上瘾者,但我知道您可以轻松地自定义类路径,并且它不会与pom文件保持同步。因此,eclipse使用的类路径很可能与maven类路径不匹配。将这个jar添加到构建路径中 尽管这样通过maven添加依赖性更好
<dependency>
<groupId>javax.persistence</groupId>
<artifactId>persistence-api</artifactId>
<version>1.0.2</version>
</dependency>
javax.persistence
持久性api
1.0.2
问候
Anshul“所以我很确定异常与库问题无关,persistence.xml文件可能会导致问题。”-我很确定你错了。据我所知,导致
ClassNotFoundError
的原因只有一种,那就是类在类路径上的任何位置都不可用。检查构建创建的WAR,查看它放入WEB-INF/lib/
中的JAR,以及Persistence.class
是否真的在其中?如果它是一个控制台应用程序,你是如何运行它的?在eclipse中,我可以调用这些类而不会出现任何错误,所以我认为Nessery libs已经完全加载了,这并不是真正的结论。您的实际程序是如何运行的?从字面上看,用于执行java
?@Millimoose+1的命令行是什么。Eclipse有自己的元模型;与Maven大不相同的是,很多事情都发生在幕后。我建议不要在“this should work”中使用Eclipse进行备份。当您从命令行运行mvn clean install
时,它是否编译?
<dependency>
<groupId>javax.persistence</groupId>
<artifactId>persistence-api</artifactId>
<version>1.0</version>
</dependency>
<dependency>
<groupId>javax.persistence</groupId>
<artifactId>persistence-api</artifactId>
<version>1.0.2</version>
</dependency>