如何将战争合二为一?

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

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

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

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

我记得货物maven2插件有一个uberwar mojo。 我没有使用它,但我知道它旨在合并战争,但你需要小心避免冲突。

快速扫描源表示您定义merge descriptor以确定如何合并战争。 不幸的是, 文档网站已经丢失,所以我不能再给你任何细节了。

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

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

    org.codehaus.cargo cargo-maven2-plugin 1.0 true  merge.xml       project1.groupId project1 war 1.0.0   project2.groupId project2 war 1.2.0   

(仍在寻找merge.xml示例)

显然可以做到这一点,但我认为你最好先在一个WAR上工作。 战争内容的后期“挑选和混合”对我来说就像支持噩梦一样。

EAR旨在容纳多种东西。 这对你有用吗?


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

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

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

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

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

你可能能够使用One-Jar。

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

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