10

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

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

4

6 回答 6

8

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

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

于 2009-10-07T17:54:16.413 回答
4

我记得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> 

(仍在寻找 merge.xml 示例)

于 2009-10-07T17:52:34.123 回答
1

这样做显然是可能的,但我认为您最好首先处理单个 WAR。对我来说,后期对 WAR 内容的“挑选和混合”听起来像是一场噩梦。

于 2009-10-07T17:48:03.430 回答
1

EAR 旨在容纳多种东西。这对你来说有可能吗?


编辑:首先,让我们假设没有重复的资源(哪个应该放在最终的 jar 中?)并且所有 jar 都是兼容的(每个库只有一个版本等)。

您应该可以只复制 WEB-INF/ 的内容,除了需要仔细合并的各种 XML 文件。最简单的方法可能是使用 XSLT 样式表,它允许您保存两个 XML 文档并将它们合并(如果我没记错的话,这是标签)。您需要为每个 xml 文件创建一个,以便确定您正确执行此操作 - 只需考虑 JSF 导航。

所以,我的建议是一个简单的资源副本和一个手工制作的 XSLT 样式表 pr xml 配置文件。

于 2009-10-07T18:25:07.317 回答
0

一般来说 - 不,这是不可能的。如果您有重复的 JSP 名称怎么办?Servlet 名称/映射?加载不同参数的相同上下文侦听器(如果您使用 Spring / Struts / 等则很常见)?你明白了。

在您的特定情况下,根据您的具体情况,可能会也可能不会。提取战争和复制 JSP/类/库很容易;合并 web.xml 有点复杂,因为您必须维护元素顺序 - 手动定义“合并的”web.xml 可能更容易。

于 2009-10-07T17:50:05.363 回答
-1

您也许可以使用 One-Jar 获得一些东西。

http://one-jar.sourceforge.net/

它可能不会做你想做的一切。

于 2009-10-07T17:50:44.220 回答