Java 如何将战争融为一体?

Java 如何将战争融为一体?,java,maven-2,jakarta-ee,packaging,war,Java,Maven 2,Jakarta Ee,Packaging,War,在我们公司,我们有许多不同的模块作为单独的战争构建。 每个客户都可以挑选他想要购买的模块。 由于所有模块共享相同的会话、安全上下文等,因此将它们合并到单个war中是有意义的 有可能使这个过程自动化吗?例如,它应该合并web.xml,计算每个wars依赖项,复制.jsp和.class等文件。顺便说一句,我们正在使用Maven,但无法找到解决此问题的方法。显然可以这样做,但我认为您最好先处理一个WAR。对我来说,后期战争内容的“挑选和混合”就像是一场支持噩梦。一般来说——不,这是不可能的。如果有重复

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


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

显然可以这样做,但我认为您最好先处理一个WAR。对我来说,后期战争内容的“挑选和混合”就像是一场支持噩梦。

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


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

您可能可以在一个Jar中使用一些东西

它可能并不是你想要的一切。

我记得它有一个
uberwar
mojo。我没有使用它,但我知道它是为了合并战争,尽管你需要小心避免冲突

快速扫描源代码表明您定义了一个
合并描述符
,以确定如何合并战争。不幸的是,这封信不见了,所以我不能给你更多的细节

您可以查看该站点以了解其当前状态

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


org.codehaus.cargo
cargo-maven2-plugin
1
真的
merge.xml
project1.groupId
项目1
战争
1.0.0
project2.groupId
项目2
战争
1.2.0

(仍在寻找merge.xml示例)

尽管djna和ChssPly76提到了风险,但您可以通过使用覆盖层来实现这一点。这将要求您分离出servlet映射,以确保没有任何URL冲突等,但这可能会奏效


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

耳朵设计用于容纳多个东西。这对你有可能吗


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

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


因此,我的建议是一个简单的参考资料副本和一个手工制作的XSLT样式表pr xml配置文件。

@Pascal我倾向于同意,但如果没有重构选项,这将提供一个workaround@Rich当然,这是真的,我给了你+1。我删除了我之前的评论,因为它可能会被误解。如果发现任何此类冲突,我很高兴能拥有中止的工具。我认为一个策略可以处理这些名称的直接冲突(覆盖使用“先赢”策略,尽管“包括次战在内的战争获胜”这对我来说更有意义。我想这样做,合并web XML,并将sub-war中的servlet和过滤器映射并在结果中可用。如果servlet名称或servlet映射路径发生冲突,那么就有一个策略来解决上述冲突。当您有一个基础平台想要合并到不同的终端项目中时,这非常有用cts/products。这是一个选项(将限制web服务器的数量)但在这种情况下,我仍然需要在战争之间共享会话和安全上下文。一些应用服务器允许在战争之间共享http会话,但这似乎不是标准功能。我知道EAR可以容纳多个不相关的web应用,但不会将两个web应用合并为一个。但我认为我需要研究more关于如何使用EAR。推荐任何参考资料或EAR项目?如果客户不购买该模块,那么我不想将该模块分发给客户(并将其隐藏)。此外,这样的战争将是巨大的-这对于开发目的来说非常不切实际。这几乎适用于所有文件(无冲突)来自不同webapp的战争。你知道一种合并不同web.xml文件的方法吗?