Jakarta ee 什么是「;Java EE 7 API库“;及;Java EE Web 7 API库“;什么时候使用它们?

Jakarta ee 什么是「;Java EE 7 API库“;及;Java EE Web 7 API库“;什么时候使用它们?,jakarta-ee,netbeans,glassfish,java-ee-7,glassfish-4.1,Jakarta Ee,Netbeans,Glassfish,Java Ee 7,Glassfish 4.1,我在GlassFish 4.1/JavaEE7(NetBeans 8.0.2)上运行了一个成熟的JavaEE项目,不使用ApacheMaven 根据项目功能,必须将CDI依赖项添加到项目/模块,即EE模块和Web模块(以及类库,如果有的话) 很长一段时间以来,我一直感到困惑,因为有人建议将“JavaEE7API库”或“JavaEEWeb7API库”作为CDI依赖项添加到编译时类路径中(这些库捆绑在NetBeans中,在使用NetBeans时随时可用) 由于这些库包含一组API(可能是从Servl

我在GlassFish 4.1/JavaEE7(NetBeans 8.0.2)上运行了一个成熟的JavaEE项目,不使用ApacheMaven

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

很长一段时间以来,我一直感到困惑,因为有人建议将“JavaEE7API库”或“JavaEEWeb7API库”作为CDI依赖项添加到编译时类路径中(这些库捆绑在NetBeans中,在使用NetBeans时随时可用)

由于这些库包含一组API(可能是从Servlet API开始的整个Java EE堆栈),因此在Java EE应用程序中需要CDI功能时,将其中一个库添加到编译时类路径(特别是在EE项目中)是没有意义的

为什么有人多次建议(尤其是在NetBeans项目中)添加这些库中的一个,而作为cdi依赖项的CDIAPI.jar已经足够了


当JavaEE应用程序中需要CDI功能时,我在这个站点或其他地方都找不到一个规范的答案,即究竟要在NetBeans项目中添加哪个库。顺便说一句,只添加
cdiapi.jar
很好。

据我所知,JavaEE7API库提供了完整的规范配置文件,而JavaEEWeb7API库只提供了Web配置文件api。如果您要部署到类似Tomcat的东西,那么您只需要web概要文件(Jax-RS、JSF、JPA)。如果您计划使用Jax-WS(基于SOAP的web服务)、ejb、JMS等做更多的企业级工作,那么就使用完整的规范来搜索javaee概要文件。上一次我检查规范时只定义了两个:FULL和WEB


无论哪种情况,您都应该在pom中将它们标记为
提供的

所有
javaee api
javaee web api
cdi api
都只是api定义。它们不包含函数性,它们只包含使代码编译所必需的接口。结果是,
javaeeapi
javaeewebapi
都不应包含在应用程序中,因为它们已经包含在应用程序服务器中。应用服务器也提供了实现,它本身相当大,有时有超过100MB的库


如果您的应用程序仅仅依赖于CDI,那么您可以自由地将CDIAPI作为依赖项。如果您想从javaee获得更多信息,那么最好选择一个概要文件(full或web)。但是,请注意,服务器总是提供至少包括在Web配置文件中的所有API,因此值得考虑使用它。只有应用服务器不完全支持JavaEE(例如TomEE),有选择地选择依赖项才有价值。在这种情况下,您有时甚至需要将实现包含在应用程序中,或将其放在服务器中。

我的想法是,目前在企业Java中处理依赖项和注入的方法不止一种。这就是为什么您会看到这些建议。它是一个基本的JSP/Servlet容器。如果您将Tomcat视为JavaEEWeb概要文件容器,那么事情就会严重失败。感谢您的澄清。我从未使用过Tomcat,但我的印象是它支持web配置文件。@Tiny,你是对的,Tomcat是一个servlet容器,只提供servlet api,这是Java EE的一小部分。尽管您可以在tomcat上构建定制的应用服务器(通过手工挑选实现),但我实际上指的是类似于TomEE的东西,它支持JavaEE6Web概要文件,但完整概要文件仅部分支持。可能还有其他不太为人所知的部分支持的应用服务器。我纠正了我的回答,改为提到了托米。