如何将战争合二为一?

Dan*_*Dan 10 java maven-2 packaging war java-ee

在我们公司,我们有许多不同的模块构建为单独的战争.每个客户都可以挑选他想要购买的模块.由于所有模块共享相同的会话,安全上下文等,因此将它们合并为单个战争是有意义的.

是否可以自动化此过程?例如,它应该合并web.xml,计算每个wars依赖项,复制像.jsp和.class等文件.顺便说一句,我们使用的是Maven,但是无法找到解决这个问题的方法.

Ste*_*eed 8

考虑到djna和ChssPly76提到的风险,你可以通过使用Maven WAR插件的叠加来实现这一点.这将要求您分离出servlet映射以确保您没有任何URL冲突等,但它可能会起作用.

基本上,您创建一个具有多个WAR依赖项的模块,并使用该插件将它们合并为一个新的.


Ric*_*ler 5

我记得cargo-maven2-plugin有一个uberwar魔力。我没有使用过它,但我知道它的目的是合并战争,尽管你需要小心避免冲突。

快速浏览源代码表明您定义了一个merge descriptor来确定如何合并战争。不幸的是,文档站点丢失了,因此我无法向您提供更多详细信息。

您可以查看Codehaus Jira网站以了解其当前状态。

要使用该插件,您需要指定如下配置:

<build>
  <plugins>
    <plugin>
      <groupId>org.codehaus.cargo</groupId>
      <artifactId>cargo-maven2-plugin</artifactId>
      <version>1.0</version>
      <extensions>true</extensions>
      <configuration>
      <descriptor>merge.xml</descriptor>
      </configuration>
    </plugin>
  </plugins>
</build>
<dependencies>
  <dependency>
    <groupId>project1.groupId</groupId>
    <artifactId>project1</artifactId>
    <type>war</type>
    <version>1.0.0</version>
  </dependency>
  <dependency>
    <groupId>project2.groupId</groupId>
    <artifactId>project2</artifactId>
    <type>war</type>
    <version>1.2.0</version>
  </dependency>
</dependencies> 
Run Code Online (Sandbox Code Playgroud)

(仍在寻找 merge.xml 示例)