這只是由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
「所以我敢肯定的是,沒有按例外」不涉及庫問題,persistence.xml文件可能會導致問題。「 - 我敢肯定你會錯的。真的只有一種方法是我知道引發了一個'ClassNotFoundError',並且這個類在類路徑的任何地方都不可用。檢查你的構建創建的WAR,看看它放入'WEB-INF/lib /'中的JAR,以及Persistence.class是否真的存在於它們中?如果它是一個控制檯應用程序,你如何運行它? – millimoose 2013-02-09 12:08:12
在日食中,我可以調用那些沒有任何錯誤的類,所以我認爲這些需要的庫已經完全加載了。 – 2013-02-09 12:17:34
這並不是真正的結論。你的實際程序如何運行?在字面上,用於執行'java'的命令行是什麼? – millimoose 2013-02-09 12:32:40