2009-10-07 57 views
10

在我們公司,我們有許多不同的模塊構建爲單獨的戰爭。 每個客戶可以挑選他想購買的模塊。由於所有模塊共享相同的會話,安全上下文等,因此將它們合併爲單個戰爭是有意義的。如何將戰爭融入其中?

是否可以自動執行此過程?例如,它應該合併web.xml,計算每個戰爭的依賴關係,複製諸如.jsp和.class等文件。順便說一下,我們使用的是Maven,但無法找到解決此問題的方法。

回答

7

頒授機構DJNA和ChssPly76,可能你所提到的風險可以通過使用覆蓋圖與Maven WAR plugin來實現此目的。這將需要您分離出servlet映射以確保您沒有任何URL衝突等,但它可能會訣竅。

基本上,您創建了一個具有多個WAR依賴關係的模塊,並使用該插件將它們合併到一個新的模塊中。

+0

這適用於幾乎所有文件(非clashin g)來自不同的webapp的戰爭。你知道一種合併不同的web.xml文件的方法嗎? – 2014-02-12 18:39:56

1

這樣做顯然是可行的,但我認爲你最好先在單個WAR上工作。對WAR內容來說,遲到的「挑選和混合」就像是對我的支持噩夢。

+1

如果客戶端沒有購買該模塊,那麼我不想將模塊分發給客戶端(並訴諸隱藏它..)。此外,這樣的戰爭將是巨大的 - 這對於開發目的來說是非常不切實際的。 – Dan 2009-10-27 16:12:05

0

一般來說 - 不,這是不可能的。如果您有重複的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

-1

你可能可以用One-Jar獲得一些東西。

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

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

+0

One-jar將不會與戰爭一起工作 – 2009-10-07 22:05:27

4

我記得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

1

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