2013-02-09 107 views
4

這只是由Maven構建的普通JPA控制檯。我有一個很煩人的例外爲什麼運行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 
+1

「所以我敢肯定的是,沒有按例外」不涉及庫問題,persistence.xml文件可能會導致問題。「 - 我敢肯定你會錯的。真的只有一種方法是我知道引發了一個'ClassNotFoundError',並且這個類在類路徑的任何地方都不可用。檢查你的構建創建的WAR,看看它放入'WEB-INF/lib /'中的JAR,以及Persistence.class是否真的存在於它們中?如果它是一個控制檯應用程序,你如何運行它? – millimoose 2013-02-09 12:08:12

+0

在日食中,我可以調用那些沒有任何錯誤的類,所以我認爲這些需要的庫已經完全加載了。 – 2013-02-09 12:17:34

+3

這並不是真正的結論。你的實際程序如何運行?在字面上,用於執行'java'的命令行是什麼? – millimoose 2013-02-09 12:32:40

回答

1

添加缺少的依賴於你的pom.xml

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

爲什麼日食內運行?

我不是一個eclipse上癮者,但我知道你可以輕鬆地定製你的類路徑,它不會與你的pom文件保持同步。所以eclipse使用的類路徑與maven類路徑不匹配的可能性很大。

0

添加這個罐子到構建路徑link

雖然其更好地通過行家來添加依賴性這樣

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

問候 Anshul

相關問題