Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/402.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 为什么在运行JPA时会出现此异常?_Java_Maven_Jpa - Fatal编程技术网

Java 为什么在运行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

这只是Maven构建的普通JPA控制台。我有一个非常恼人的例外

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>