Maven是否应该针对不同的应用服务器打包不同的WAR?

时间:2010-09-24 20:00:42

标签: java web-applications maven-2 servlets packaging

我刚开始将我的Web应用程序项目打包为WAR文件,并且遇到了Tomcat与Jetty配置与JBoss vs Websphere等之间的差异。

我应该尝试配置一些超级智能的一体化WAR文件,还是应该创建不同的Maven配置文件来为每个应用服务器创建不同的WAR?

我不认为我应该为每个应用服务器WAR创建一个单独的Maven模块,我应该吗?

2 个答案:

答案 0 :(得分:6)

我最初会尝试用一场超级聪明的战争来解决这个问题。我不知道您遇到了什么问题,但jboss-web.xmljetty-web.xml 能够在一个WEB-INF中共存。

如果现实不那么慷慨,我会使用war overlays功能和版本分类器。文件系统结构和pom.xml将是这样的:

myproject                (packaging: pom, version: 1.0.0-SNAPSHOT)
+-- myproject-war        (packaging: war, version: 1.0.0-SNAPSHOT)
+-- myproject-war-jboss  (packaging: war, version: 1.0.0-jboss-SNAPSHOT)
+-- myproject-war-jetty  (packaging: war, version: 1.0.0-jetty-SNAPSHOT)

两个特定于应用程序服务器的战争仅包含特定于应用程序服务器的文件,并将普通战争作为叠加层导入。三个不同的war已部署到您的Maven存储库中,版本号的差异仅在于分类器部分(例如myproject-war-1.0.0-jboss)。

理想情况下,您可以使用类似pom.xml的内容在<version>${project.parent.version}-jboss</version>中设置版本控制,但我不能完全确定它可以与SNAPSHOT分类器结合使用并且仍能正常工作。

答案 1 :(得分:1)

我尝试永远不要在战争中运送配置。代码不应该关心它被运送到什么环境。它使部署更加复杂,但另一方面,您可以轻松推出配置更改,并且必须担心意外地将代码更改部署到环境中。

这种建议在这种情况下会加倍应用,因为您似乎遇到了不同环境不同容器的挑战。