如果我针对 Glassfish 开发应用程序,是否需要在 POM.xml 中包含 Java EE maven 依赖项?

Do I need to include Java EE maven dependencies in POM.xml if I develop my application against Glassfish?

我正在开发一个 Java EE 应用程序,我打算 运行 它在 Java EE 应用程序服务器上(我选择了 Glassfish)。

我知道 Glassfish 是 Java EE 平台的参考实现 (RI),它 implements/contains Java EE 规范的独立参考实现。如果我错了请纠正我,但这让我明白 Glassfish 的二进制文件将包含所有相关的 RIs 罐子。

我正在使用 Maven 作为我的 build/project 管理系统,我将 build/package 我的应用程序放在 WAR 文件中(因为我的应用程序是 Java EE web应用)。然后,我会将此 WAR 部署到我的应用程序服务器 - Glassfish,然后 运行s.

我的问题是,我是否需要在我的 Maven pom.xml 文件中指定 Java EE 依赖项?

我正在使用 Eclipse 作为我的 IDE,目前我需要包含这些依赖项,否则 Eclipse 将无法识别 Java EE 源 - 它会抱怨编译时错误。

但是如果我确实包含在我的 pom.xml 中,那并不意味着我在我的应用程序中(在 WAR文件),而像 Glassfish 这样的应用服务器已经提供了它?因为 Maven 下载这些 jar 并放入您的代码库中 - 对吗?

for.eg(仅以JMS为例):

<dependency>
    <groupId>javax.jms</groupId>
    <artifactId>javax.jms-api</artifactId>
    <version>2.0.1</version>
</dependency>

我需要以上吗?我知道如果我针对 Tomcat 进行开发,我肯定会这样做,因为它是一个 Servlet 容器并且没有其他完整的 Java EE 规范。

是的。你需要用范围标记它们 provided 告诉 Maven 它应该在编译时使用它们,但是在运行时实现由应用程序服务器提供,所以它们不应该被打包到 WAR.

GlassFish 已经有 Java EE jar,但您将需要它用于编译目的,因此您必须为这些 jar 添加依赖项,但提供 "provided" 范围,因此这些 jar 不会捆绑在您的 war 或 ear 文件中。请看下面的例子

<dependency>
    <groupId>javax</groupId>
    <artifactId>javaee-api</artifactId>
    <version>6.0</version>
    <scope>provided</scope>
</dependency>