2012-07-07 38 views
3

但是看着其他情況下,我試圖把這些依賴於Maven的:使用JPA,Maven和Tomcat的,但得到java.lang.NoClassDefFoundError:使用javax /持續性/持久性

<dependencies> 
    <dependency> 
     <groupId>junit</groupId> 
     <artifactId>junit</artifactId> 
     <version>3.8.1</version> 
     <scope>test</scope> 
    </dependency> 
    <dependency> 
     <groupId>javax</groupId> 
     <artifactId>javaee-api</artifactId> 
     <version>6.0</version> 
     <scope>provided</scope> 
    </dependency> 
    <dependency> 
     <groupId>mysql</groupId> 
     <artifactId>mysql-connector-java</artifactId> 
     <version>5.1.21</version> 
    </dependency> 
</dependencies> 

我試圖運行直接從Eclipse,但我不斷收到錯誤: java.lang.NoClassDefFoundError:javax/persistence/Persistence

我不明白它,因爲它應該由javaee-api依賴項提供。

問候, 愛德華

修訂

現在,我想在我的POM使用這些:

<dependencies> 
    <dependency> 
     <groupId>junit</groupId> 
     <artifactId>junit</artifactId> 
     <version>3.8.1</version> 
     <scope>test</scope> 
    </dependency> 
    <dependency> 
     <groupId>org.hibernate</groupId> 
     <artifactId>hibernate-entitymanager</artifactId> 
     <version>4.1.4.Final</version> 
    </dependency> 
    <dependency> 
     <groupId>org.hibernate.javax.persistence</groupId> 
     <artifactId>hibernate-jpa-2.0-api</artifactId> 
     <version>1.0.1.Final</version> 
    </dependency> 
    <dependency> 
     <groupId>org.hibernate</groupId> 
     <artifactId>hibernate-core</artifactId> 
     <version>4.1.4.Final</version> 
    </dependency> 
    <dependency> 
     <groupId>org.hibernate.java-persistence</groupId> 
     <artifactId>jpa-api</artifactId> 
     <version>2.0.Beta-20090815</version> 
    </dependency> 
    <dependency> 
     <groupId>mysql</groupId> 
     <artifactId>mysql-connector-java</artifactId> 
     <version>5.1.21</version> 
    </dependency> 
    <dependency> 
     <groupId>org.apache.tomcat</groupId> 
     <artifactId>tomcat-servlet-api</artifactId> 
     <version>7.0.26</version> 
     <scope>provided</scope> 
    </dependency> 
</dependencies> 

一旦Tomcat的將不提供我任何的功能。但是我仍然遇到同樣的錯誤,它是否與依賴範圍有關?另外,我的進口,如:

import javax.persistence.Entity; 
import javax.persistence.Id; 
import javax.persistence.Persistence; 

我如何告訴我的容器來使用Hibernate實現?

+0

開始作爲JavaEE的-API被命名爲它的唯一的API定義,但不提供這一個一個實現,則不應使用Hibernate的註解。我假設你需要像Hibernate,EclipseLink等實現。此外,你定義的範圍「提供」,這意味着它將由像JBoss,Glassfish等環境提供。 – khmarbaise 2012-07-07 15:32:13

+0

我看到,我試過提供Hibernate實現,但它didn沒有工作。另外,我使用Tomcat,它應該提供一個實現。有誰知道哪些是使用JPA和Hibernate的必要依賴關係? – eduardohl 2012-07-07 15:44:53

+0

你是怎麼做到的?你能爲它展示一下嗎? Tomcat不提供JPA實現,因爲它是一個servlet引擎而不是JEE服務器。 – khmarbaise 2012-07-07 15:56:40

回答

5

終於能夠解決這個問題。這是正確的POM對Hibernate 4.作爲一個依賴從3.5

<dependencies> 
    <dependency> 
     <groupId>junit</groupId> 
     <artifactId>junit</artifactId> 
     <version>3.8.1</version> 
     <scope>test</scope> 
    </dependency> 
    <dependency> 
     <groupId>org.hibernate</groupId> 
     <artifactId>hibernate-entitymanager</artifactId> 
     <version>4.1.4.Final</version> 
    </dependency> 
    <dependency> 
     <groupId>org.hibernate.javax.persistence</groupId> 
     <artifactId>hibernate-jpa-2.0-api</artifactId> 
     <version>1.0.1.Final</version> 
    </dependency> 
    <dependency> 
     <groupId>org.hibernate</groupId> 
     <artifactId>hibernate-core</artifactId> 
     <version>4.1.4.Final</version> 
    </dependency> 
    <dependency> 
     <groupId>mysql</groupId> 
     <artifactId>mysql-connector-java</artifactId> 
     <version>5.1.21</version> 
    </dependency> 
    <dependency> 
     <groupId>org.slf4j</groupId> 
     <artifactId>slf4j-jdk14</artifactId> 
     <version>1.5.8</version> 
    </dependency> 
</dependencies> 
+0

我遇到了和你一樣的問題。我得到完全相同的錯誤。我複製了你的pom.xml文件,但它不適合我。在以下鏈接 http://stackoverflow.com/questions/13584269/java-lang-classnotfoundexception-javax-persistence-spi-persistenceprovider 我發佈了一些關於我的項目的信息。任何人都可以給我一個提示? – panipsilos 2012-11-28 13:56:29