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

时间:2015-08-05 13:13:55

标签: java eclipse maven java-ee glassfish

我正在开发Java EE应用程序,我打算在Java EE Application Server上运行它(我选择了Glassfish)。

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

我正在使用Maven作为我的构建/项目管理系统,我将在WAR文件中构建/打包我的应用程序(因为我的应用程序是一个Java EE Web应用程序)。然后我将这个WAR部署到我的Application Server - Glassfish上然后运行。

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

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

但是,如果我确实包含在我的pom.xml中,那么这并不意味着我在我的应用程序中(在WAR文件中)复制了外部依赖项(Java EE RI jar),而像Glassfish这样的Application Server已经提供了它吗?因为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规范。

  • 这是我有点困惑的部分,我希望有人会对此有所了解。

2 个答案:

答案 0 :(得分:4)

GlassFish已经有了Java EE jar,但你需要它来进行编译,所以你必须为这些jar添加一个依赖项,但是提供范围为“提供”,这样这些jar就不会捆绑在你的war或ear文件中。请看下面的例子

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

答案 1 :(得分:3)

是。您需要使用范围provided标记它们,告诉Maven它应该在编译时使用它们,但在运行时期间,实现由应用程序服务器提供,因此它们不应打包到WAR中。