2010-03-24 52 views
6

假設我有一個在maven中定義的war和jar項目。Jar依賴於戰爭項目中的類

罐子項目是依賴於戰爭項目

我設法在戰爭插件添加

在戰爭項目<attachClasses>爲true,以獲得封裝模式這個工作。

,使依賴於

 <groupId>com</groupId> 
     <artifactId>oneway-delegator</artifactId> 
     <version>1.0</version> 
     <classifier>classses</classifier> 
在罐子POM

但是,當運行只編譯類jar沒有創建,一切都失敗。

任何想法的人?

+0

我不明白你的問題。你的戰爭項目是依賴於你的jar項目還是其他方式?如果你的戰爭項目依賴於一個jar項目,它應該是非常直接的,除了分類器元素,依賴聲明看起來很好。它不應該被需要。 – Buhb

+0

嗯,我不會問這個,如果戰爭取決於罐子,它的罐子取決於戰爭(問題的第二行) – Roman

回答

12

但是,當運行只編譯類jar沒有創建,一切都失敗。

事實上,你可以配置Maven的戰爭插件來打包/部署類和資源包含在你的Web應用中使用具有以下配置的分類的「附加」 JAR神器:

<project> 
    ... 
    <artifactId>mywebapp</artifactId> 
    <version>1.0-SNAPSHOT</version> 
    ... 
    <build> 
    <plugins> 
     <plugin> 
     <artifactId>maven-war-plugin</artifactId> 
     <version>X.Y</version> 
     <configuration> 
      <attachClasses>true</attachClasses> 
     </configuration> 
     </plugin> 
    </plugins> 
    </build> 
    ... 
</project> 

但是此工件是在package階段創建的,因此如果僅運行compile,則不要指望它在那裏。

請注意,這個配置選項已經引入了一個非常特殊的用例 - 骨幹戰爭用例。如果您需要在另一個項目中重新使用此JAR,建議的方法通常是將這些類移動到一個單獨的模塊中,該模塊構建JAR,然後從您的Web應用程序以及其他任何項目中聲明對該JAR的依賴關係需要它。

7

不要這樣做。

這不是一個可接受的依賴項,使得依賴於war(Java EE特定應用程序包)的jar(純java代碼)成爲可能。如果你的戰爭中有代碼依賴於你的代碼,那麼這個代碼應該在它自己的jar中,然後web應用程序和jar項目都會對它有共同的依賴。

+0

是的,這聽起來像個好主意......謝謝 – Roman

+1

好的建議。 「當有疑問時,創建另一個模塊」,當涉及到maven時。 – whaley

+2

它是一個常見的情況,當你有一場戰爭,第二個maven模塊包含第一個webapp的一些集成測試。在這種情況下,能夠使用webapp類和依賴關係將非常有用。 –

相關問題