4

我有一个不使用 Apache Maven 在 GlassFish 4.1 / Java EE 7 (NetBeans 8.0.2) 上运行的成熟 Java EE 项目。

根据项目功能,必须将 CDI 依赖项添加到项目/模块,即 EE 模块和 Web 模块(以及类库,如果有的话)。

很长一段时间以来,看到有人建议将“Java EE 7 API 库”或“Java EE Web 7 API 库”作为 CDI 依赖项添加到编译时类路径中(这些库捆绑在 NetBeans 和使用 NetBeans 时,开箱即用)。

由于这些库包含一系列 API,可能是从 Servlet API 开始的整个 Java EE 堆栈,因此当 CDI 功能是在 Java EE 应用程序中需要。

为什么多次建议特别是在 NetBeans 项目中添加这些库之一,而仅cdi-api.jar作为 CDI 依赖项就足够了?

当 Java EE 应用程序需要 CDI 功能时,我在此站点或其他地方都没有找到关于在 NetBeans 项目中确切添加哪个库的规范答案。cdi-api.jar顺便说一句,仅添加就可以了。

4

2 回答 2

5

所有javaee-api,javaee-web-apicdi-api只是 API 定义。它们不包含功能,它们仅包含必要的接口,而不是使您的代码编译。结果是任何一个javaee-api也不javaee-web-api应该包含在您的应用程序中,因为它们已经包含在应用程序服务器中。应用服务器也提供了实现,它本身就很大,有时有超过 100MB 的库。

如果您的应用程序仅依赖于 CDI,您可以随意将cdi-api其作为依赖项。如果您想从 javaee 获得更多信息,那么最好选择其中一个配置文件(完整或网络)。但是,请注意,服务器始终至少提供 Web 配置文件中包含的所有 API,因此也值得考虑使用它。选择性地选择依赖关系仅对不完全支持 Java EE(例如 Tom EE)的应用程序服务器有价值。在这种情况下,您有时甚至需要将实现包含在您的应用程序中或将其放入服务器中。

于 2015-08-31T08:26:01.090 回答
-1

据我所知,Java EE 7 API 库提供了完整的规范配置文件,而Java EE Web 7 API 库只提供了 Web 配置文件 API。如果您要部署到 Tomcat 之类的东西,那么您只需要 Web 配置文件(Jax-RS、JSF、JPA)。如果您打算使用 Jax-WS(基于 SOAP 的重 Web 服务)、EJB、JMS 等做更多企业级的事情,那么请使用完整的规范。请搜索 Java EE 配置文件。最后我检查了规范只定义了两个:FULL 和 WEB。

在任何一种情况下,您都应该将它们标记为provided在您的 pom.xml 中。

于 2015-08-31T05:44:11.923 回答