如何将战争融入其中?

问题描述:

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

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

颁授机构DJNA和ChssPly76,可能你所提到的风险可以通过使用覆盖图与Maven WAR plugin来实现此目的。这将需要您分离出servlet映射以确保您没有任何URL冲突等,但它可能会诀窍。

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

+0

这适用于几乎所有文件(非*in g)来自不同的webapp的战争。你知道一种合并不同的web.xml文件的方法吗? – 2014-02-12 18:39:56

这样做显然是可行的,但我认为你最好先在单个WAR上工作。对WAR内容来说,迟到的“挑选和混合”就像是对我的支持噩梦。

+1

如果客户端没有购买该模块,那么我不想将模块分发给客户端(并诉诸隐藏它..)。此外,这样的战争将是巨大的 - 这对于开发目的来说是非常不切实际的。 – Dan 2009-10-27 16:12:05

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

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

+0

如果发现任何这样的冲突,我会很高兴有这个工具可以中止。 – Dan 2009-10-07 18:16:18

+0

我认为一项政策可以处理那些直接的名称冲突(叠加使用“第一赢”策略,虽然“包括次战争胜利的战争”对我来说更合理,我想这样做, xmls,并且有来自sub-war的映射的servlet和过滤器,并且在结果中可用。如果存在servlet名称或servlet映射路径的冲突,则具有如上所述的用于解决冲突的策略。当您拥有所需的基础平台时非常有用结合到不同的最终项目/产品中 – 2014-02-12 18:43:01

你可能可以用One-Jar获得一些东西。

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

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

+0

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例如)

+0

@Pascal我倾向于同意,但如果没有重构的选项,这提供了一个解决方法 – 2009-10-07 18:07:14

+0

@Rich好吧,这是真的,我给了你的我的+1。我删除了我以前的评论,因为它可能会被误解。 – 2009-10-07 18:11:43

+2

请参阅http://cargo.codehaus.org/Merging+WAR+files – 2009-10-07 19:35:16

EARs被设计成可容纳多种东西。这对你来说可能吗?


编辑:首先,让我们假设有没有重复的资源(其中一个应该在最后的罐子去了?),所有罐子是兼容的(你只有每个库等的一个版本) 。

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

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

+0

这是一个选项(这会限制Web服务器的数量),但在这种情况下,我仍然需要在战争之间共享会话和安全上下文。一些应用程序服务器允许在战争之间共享http会话,但这似乎不是标准功能。 – Dan 2009-10-07 19:58:13

+0

我知道EAR可以容纳多个不相关的webapps,但是不会将两个web应用合并成一个?但我认为我需要更多地研究如何使用EAR。推荐任何参考或EAR项目来看? – 2014-02-12 18:43:57