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

HDa*_*ave 0 java maven-2 packaging servlets web-applications

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

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

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

Bar*_*end 6

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

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

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)
Run Code Online (Sandbox Code Playgroud)

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

理想情况下,您可以pom.xml使用类似的方式设置版本控制<version>${project.parent.version}-jboss</version>,但我不完全确定它可以与SNAPSHOT分类器结合使用并且仍然有效.

  • 我更喜欢"一个目录,一个pom.xml,一个`mvn`执行,一个存储库工件"方法.我发现它更容易预测,不太可能遇到Maven的怪异. (2认同)