在我們公司,我們有許多不同的模塊構建爲單獨的戰爭。 每個客戶可以挑選他想購買的模塊。由於所有模塊共享相同的會話,安全上下文等,因此將它們合併爲單個戰爭是有意義的。如何將戰爭融入其中?
是否可以自動執行此過程?例如,它應該合併web.xml,計算每個戰爭的依賴關係,複製諸如.jsp和.class等文件。順便說一下,我們使用的是Maven,但無法找到解決此問題的方法。
在我們公司,我們有許多不同的模塊構建爲單獨的戰爭。 每個客戶可以挑選他想購買的模塊。由於所有模塊共享相同的會話,安全上下文等,因此將它們合併爲單個戰爭是有意義的。如何將戰爭融入其中?
是否可以自動執行此過程?例如,它應該合併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