2015-08-31 59 views
2

我有一個在GlassFish 4.1/Java EE 7(NetBeans 8.0.2)上運行的未使用Apache Maven的完整Java EE項目。什麼是「Java EE 7 API庫」和「Java EE Web 7 API庫」以及何時使用它們?

根據項目功能的不同,必須將CDI依賴項添加到項目/模塊,即EE模塊和Web模塊(以及一個類庫,如果有的話)。

我一直很困惑,看到有人推薦將「Java EE 7 API庫」或「Java EE Web 7 API庫」作爲CDI依賴項添加到編譯時類路徑中(這些庫是捆綁在NetBeans中,在使用NetBeans時可立即使用)。

由於這些庫包含可能從Servlet API開始的整個Java EE堆棧的API集合,因此將這些庫中的一個添加到編譯時類路徑(特別是在EE項目中)是沒有意義的, Java EE應用程序需要CDI功能。

爲什麼在NetBeans項目中多次提到添加這些庫中的一個時,只有作爲CDI依賴項的cdi-api.jar就足夠了?

在Java EE應用程序中需要CDI功能時,在本網站或其他地方找不到正確的NetBeans項目庫。順便說一句,只添加cdi-api.jar會好起來。

+0

我的想法是,目前有多種方式來處理Enterprise Java中的依賴和注入。這就是你看到這些建議的原因。 –

回答

5

所有的javaee-api,javaee-web-apicdi-api只是API定義。它們不包含functinality,它們僅包含必要的接口,而不是用於編譯代碼。結果是應用程序中不包含javaee-apijavaee-web-api,因爲它們已包含在應用程序服務器中。這個實現也是由應用服務器提供的,它本身非常大,有時超過100MB的庫。

如果您的應用程序只依賴於CDI,則可以自由地將cdi-api作爲依賴項。如果您想從javaee獲得更多,則最好選擇其中一個配置文件(full或web)。但是,請記住,服務器始終至少提供Web配置文件中包含的所有API,因此也值得考慮使用它。有選擇地選擇依賴關係只適用於完全不支持Java EE的應用程序服務器(例如Tom EE)。在這種情況下,有時甚至需要將應用程序包含到服務器中。

+0

@Tiny,你說的對,tomcat是一個servlet容器,並且只提供servlet-api,這是Java EE的一小部分。雖然您可以在tomcat上構建自定義應用程序服務器(通過手工實現),但實際上我的意思是像TomEE,它支持Java EE 6 Web Profile,但完全配置文件僅部分支持。也可能有其他不太知名的應用程序服務器也有部分支持。我通過提到TomEE來改正我的答案。 – OndrejM

-1

據我所知道的,的Java EE 7 API庫提供了完整規範的個人資料,而的Java EE 7的Web API庫只提供Web Profile的API。如果你正在部署Tomcat,那麼你只需要Web配置文件(Jax-RS,JSF,JPA)。如果您計劃通過Jax-WS(基於SOAP的重型Web服務),EJB,JMS等來實現更多企業級別的內容,請使用完整的規範。搜索Java EE配置文件。最後我檢查了規範只定義了兩個:FULL和WEB。

無論哪種情況,你都應該在你的pom中標記爲provided

+1

Tomcat不是Java EE Web配置文件容器。這是一個準系統JSP/Servlet容器。當您將Tomcat當作Java EE web配置文件容器處理時,情況會嚴重失敗。 – BalusC

+0

感謝您的澄清。我從來沒有使用Tomcat,但我的印象是它支持Web配置文件。 –