2009-12-14 27 views
0

通常,我使用Glass Fish作爲NetBeans的測試服務器。 最近,我試圖切換到Tomcat 6.0。只要我更改了服務器,編譯器就不再理解javax.persistence.Entity。當我檢出Tomcat 6.0的庫結構時,有一個名爲annotation-api.jar的文件,其中存在另一個javax.persistence包(!!!)。有沒有可能解決這種衝突,有兩個包含不同內容的包共享相同的名稱?使用Tomcat 6.0作爲java web應用程序的服務器導致javax.persistence註釋混亂

回答

2

annotation-api.jar不是JPA實現。像你認爲的那樣,在類路徑中沒有碰撞的方法(這會產生運行時錯誤而不是簡單的編譯錯誤)。 Tomcat沒有任何JPA實現,而Glassfish有一個內置的實現。你需要自己提供一個。您可以選擇每個OpenJPAHibernateTopLinkEclipseLink。並確保你把它放在Webapp/WEB-INF/lib

+0

我甚至不知道標準javax.persistence包位於哪裏,看起來像是來自JDK(?),但我無法在JDK包的導航樹中找到它。順便說一下,annotation-api.jar不是JPA實現,但它包含一個名爲javax.persistence的包,它使編譯器感到困惑,因爲現在編譯器無法再找到javax.persistence.Entity類(這是我的Hibernate映射)。通常情況下,我將所有jar文件放在我的項目的Libraries部分,並讓Netbeans自動部署它們,這有什麼問題嗎? – 2009-12-15 01:38:11

+0

這是不正確的。它不會混淆編譯器。 Tomcat根本沒有像Glassfish那樣提供JPA實現。 Tomcat是一個簡單的JSP/Servlet webcontainer,而Glassfish作爲一個有價值的Java EE應用服務器實現了幾乎所有的Java EE規範,包括JPA。你將自己提供一個JPA實現。將它放在'Webapp/WEB-INF/lib'中。 Netbeans在這裏無關緊要,它只是一個開發工具。 – BalusC 2009-12-15 02:25:22

+0

請看看這個屏幕截圖 http://seamoo.com/Tomcat-Hibernate-Messed-Up.jpg 您是否看到包含了javax.persistence,並且IDE不再理解實體註釋? 我知道Netbeans是一個IDE,但它反映了它的基礎機制,對吧? 你對這個問題的解釋是什麼? – 2009-12-15 05:00:23

相關問題