我有一个成熟的 Java EE 项目在 GlassFish 4.1 / Java EE 7 (NetBeans 8.0.2) 上运行,不使用 Apache Maven。
根据项目功能,必须将 CDI 依赖项添加到项目/模块,即 EE 模块和 Web 模块(以及类库,如果有)。
很长一段时间以来,我一直很困惑地看到人们建议将“Java EE 7 API Library”或“Java EE Web 7 API Library”添加到编译时类路径作为 CDI 依赖项(这些库捆绑在 NetBeans 和使用 NetBeans 时,开箱即用)。
由于这些库包含一组 API,可能是从 Servlet API 开始的整个 Java EE 堆栈,因此当 CDI 功能为Java EE 应用程序中需要。
为什么多次建议添加这些库之一,尤其是在 NetBeans 项目中,而仅cdi-api.jar
作为 CDI 依赖就足够了吗?
I do not find a canonical answer on this site nor somewhere else as to which library exactly is to be added in NetBeans projects, when the CDI functionality is required in Java EE applications. Adding only cdi-api.jar
goes fine, by the way.
All of javaee-api
, javaee-web-api
and cdi-api
只是 API 定义。它们不包含功能,只包含必要的接口,而不是使您的代码编译。结果是没有一个javaee-api
nor javaee-web-api
应该包含在您的应用程序中,因为它们已经包含在应用程序服务器中。该实现也是由应用程序服务器提供的,应用程序服务器本身相当大,有时具有超过 100MB 的库。
如果您的应用程序仅依赖于 CDI,您可以随意放置cdi-api
作为依赖。如果您想从 javaee 获得更多信息,那么最好选择其中一种配置文件(完整版或网页版)。但是,请注意,服务器始终至少提供 Web 配置文件中包含的所有 API,因此也值得考虑使用它。有选择地选择依赖项仅适用于不完全支持 Java EE 的应用程序服务器(例如 Tom EE)。在这种情况下,有时您甚至需要将实现包含在应用程序中或将其放入服务器中。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)