2012-04-30 50 views
0

我想將所有我的.class從一個依賴jar包括到WAR classes/目錄中,而不是在lib/目錄中有一個Jar。構建帶有解壓縮JAR依賴關係的WAR?

我:

my-webapp/ 
    ... 
    WEB-INF/ 
    lib/ 
     mylib-1.0-SNAPSHOT.jar 

我想:

my-webapp/ 
    ... 
    WEB-INF/ 
    classes/ 
     mylib-1.0-SNAPSHOT (all **.class**) 

我也看到Maven的依賴,插件但它要求我的罐子被安裝到本地或遠程存儲庫。但是mylib-1.0-SNAPSHOT.jar在我的WAR之前編譯是合理的,如果我打電話給mvn package,那就失敗了!

那麼,如何解開我的jar依賴到war類呢? (對於罐子類似maven-shade-plugin

+1

在Web應用程序中將類改爲jar會有什麼意義? – jddsantaella

+0

由於Jar包含我的服務的公共類,並且此webapp包含特定的類。我有多個webapps使用相同的類,所以我已經將它們打包到Jar依賴項中。對於沒有代碼重複!你認爲這是正確的方式嗎? – Aure77

+0

如果在'WEB-INF/lib'目錄中,您仍然可以使用通用jar中的類; 「WEB-INF/lib」中的所有內容都將在Web應用程序的類路徑中結束。 – user944849

回答

0

我想在通信中寫這個,但文字太長。

對不起,我沒有明白你的意思。您有多個共享類的Web應用程序,因此您已將這些常用類打包爲JAR,現在您可以分發該jar並避免代碼重複。那沒問題。在這一點上,對於Webapp,在/ WEB-INF/classes中或者在/ WEB-INF/lib /中作爲jar的一部分沒有區別,webapp可以在兩種情況下使用這些類。

有了Maven,你應該有n個項目。一個用於你的普通jar,然後,每個webapp有一個(普通jar是依賴項)。在爲其中一個Web應用程序構建WAR之前,如果常見的類已更改,則應首先安​​裝(在公用存儲庫中)jar:mvn install。一旦安裝了jar,您可以構建您的WAR:mvn war:war

+0

好吧,但這個問題是,當我有一些類取決於另一個相同的包。將這些類分離爲Jar for commons類和* classes文件夾*用於我的具體數據對我來說並不自然。而且,我的項目實際上是用Ant構建的,改變了Maven改變我的可交付成果(jar,war,ear)的結構......但是如果沒有*選項*來設置,那麼確定。 – Aure77

+0

如果現在,你已經被要求使用Maven,而不是Ant,我建議我上面寫的是:常見類的常見jar和特定代碼的'classes'文件夾(這是我們特定webapp應用程序的特定源代碼)。當你嘗試按照慣例做一些事情時,Maven並不是那麼好,所以儘量避免它。 – jddsantaella