我正在开发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规范。
答案 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中。