如何将战争融入其中?
在我们公司,我们有许多不同的模块构建为单独的战争。 每个客户可以挑选他想购买的模块。由于所有模块共享相同的会话,安全上下文等,因此将它们合并为单个战争是有意义的。如何将战争融入其中?
是否可以自动执行此过程?例如,它应该合并web.xml,计算每个战争的依赖关系,复制诸如.jsp和.class等文件。顺便说一下,我们使用的是Maven,但无法找到解决此问题的方法。
颁授机构DJNA和ChssPly76,可能你所提到的风险可以通过使用覆盖图与Maven WAR plugin来实现此目的。这将需要您分离出servlet映射以确保您没有任何URL冲突等,但它可能会诀窍。
基本上,您创建了一个具有多个WAR依赖关系的模块,并使用该插件将它们合并到一个新的模块中。
这样做显然是可行的,但我认为你最好先在单个WAR上工作。对WAR内容来说,迟到的“挑选和混合”就像是对我的支持噩梦。
如果客户端没有购买该模块,那么我不想将模块分发给客户端(并诉诸隐藏它..)。此外,这样的战争将是巨大的 - 这对于开发目的来说是非常不切实际的。 – Dan 2009-10-27 16:12:05
一般来说 - 不,这是不可能的。如果您有重复的JSP名称会怎么样? Servlet名称/映射?相同的上下文监听器加载不同的参数(如果你使用的是Spring/Struts/etc等,那么通用)?你明白了。
在您的具体情况下,根据您的具体情况可能或不可能。提取战争和复制JSP /类/库很容易;合并web.xml会稍微复杂一点,因为您必须维护元素顺序 - 手动定义“合并”的web.xml可能更容易。
如果发现任何这样的冲突,我会很高兴有这个工具可以中止。 – Dan 2009-10-07 18:16:18
我认为一项政策可以处理那些直接的名称冲突(叠加使用“第一赢”策略,虽然“包括次战争胜利的战争”对我来说更合理,我想这样做, xmls,并且有来自sub-war的映射的servlet和过滤器,并且在结果中可用。如果存在servlet名称或servlet映射路径的冲突,则具有如上所述的用于解决冲突的策略。当您拥有所需的基础平台时非常有用结合到不同的最终项目/产品中 – 2014-02-12 18:43:01
One-jar将不会与战争一起工作 – 2009-10-07 22:05:27
我记得cargo-maven2-plugin有一个uberwar
mojo。我没有使用它,但我明白它是用来合并战争的,尽管你需要小心以避免冲突。
快速扫描来源表明您定义了一个merge descriptor
来确定如何合并战争。不幸的是,documentation site已经失踪,所以我不能给你任何更多的细节。
您可以查看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例如)
@Pascal我倾向于同意,但如果没有重构的选项,这提供了一个解决方法 – 2009-10-07 18:07:14
@Rich好吧,这是真的,我给了你的我的+1。我删除了我以前的评论,因为它可能会被误解。 – 2009-10-07 18:11:43
请参阅http://cargo.codehaus.org/Merging+WAR+files – 2009-10-07 19:35:16
EARs被设计成可容纳多种东西。这对你来说可能吗?
编辑:首先,让我们假设有没有重复的资源(其中一个应该在最后的罐子去了?),所有罐子是兼容的(你只有每个库等的一个版本) 。
除了需要仔细合并的各种XML文件之外,您应该能够将WEB-INF /的内容复制到彼此的顶部。最简单的方法是使用XSLT样式表,它允许您保存两个XML文档并合并它们(如果我正确地记得这是标签)。每个xml文件都需要一个,以便正确执行此操作 - 只需考虑JSF导航即可。
因此,我的建议是资源的简单副本和手工制作的XSLT样式表pr xml配置文件。
这是一个选项(这会限制Web服务器的数量),但在这种情况下,我仍然需要在战争之间共享会话和安全上下文。一些应用程序服务器允许在战争之间共享http会话,但这似乎不是标准功能。 – Dan 2009-10-07 19:58:13
我知道EAR可以容纳多个不相关的webapps,但是不会将两个web应用合并成一个?但我认为我需要更多地研究如何使用EAR。推荐任何参考或EAR项目来看? – 2014-02-12 18:43:57
这适用于几乎所有文件(非clashin g)来自不同的webapp的战争。你知道一种合并不同的web.xml文件的方法吗? – 2014-02-12 18:39:56