2012-07-27 179 views
1

我有兩個maven項目project/foo/pom.xmlproject/bar/pom.xml。我有foo取決於bar, and I want that every time foo/pom.xml compiles, it'll automatically compile bar`。maven項目如何依賴另一個本地maven項目?

我該怎麼用maven做到這一點?

更新:我掖他們兩個到父項目,但後來,我將要如果我要運行一個子項目mvn jetty:run嗎?

回答

0

這是不可能單獨使用maven。您可以得到的最接近的數字是modules of an aggregator POM,因此您可以使用單個命令構建兩者。請注意,mvn install已經考慮自上一次構建以來是否發生過更改,因此您可以節省幾個CPU週期。

1

選項1

設置都建立在Jenkins,可同時檢測項目間的依賴

自動構建從模塊依賴關係鏈

詹金斯讀取你的項目的依賴關係,從你的POM,如果它們也建立在Jenkins的 上,觸發器的設置方式使得在其中一個依賴關係 中的新構建將自動啓動項目的新構建。

選項2

如果兩個Maven項目是密切相關的(一起發佈,共享相同的版本號),那麼或許他們真的在同一個項目的兩個模塊?

如果是這樣的情況下閱讀下面的文檔,關於如何創建一個父POM準則:

+0

見上面,我怎麼可以運行'命令mvn碼頭:run'從模塊'bar'取決於'foo'? – 2012-07-27 11:25:42

1

您可以將它們合併成一個項目,兩個模塊。

一個例子項目結構:

 
parent (pom) 
    |- foo (jar) 
    |- bar (jar) 

在父POM:

<groupId>org.me</groupId> 
<artifactId>parent-project</artifactId> 
<packaging>pom</packaging> 

<modules> 
    <module>foo</module> 
    <module>bar</module> 
</modules> 

在每個子POM:

<artifactId>foo</artifactId> 
<packaging>jar</packaging> 

<parent> 
    <groupId>org.me</groupId> 
    <artifactId>parent-project</artifactId> 
    <version>1.0-SNAPSHOT</version> 
</parent> 

要生成項目(兩個模塊)與Maven ,請從父目錄執行此操作:

$ mvn install 
+0

但是如果我想在模塊'bar'上運行'mvn jetty:run'呢? – 2012-07-27 11:25:05

+0

如果'bar'是一個戰爭項目(並且'foo'是一個jar,'bar'取決於'foo'),相同的項目結構將起作用。在這種情況下,就像通常那樣,從'bar'目錄運行'mvn jetty:run'。 – Daniel 2012-07-27 11:59:46

0

首先,按照Daniel的說法設置多模塊構建。然後轉到包含父POM的目錄。然後,例如之前安裝有自動安裝酒吧富,太,類型:

mvn --also-make --projects foo install 

這將檢查依賴反應器內,然後解析運行上欄安裝的生命週期就運行安裝生命週期之前在foo上。

這適用於任何生命週期或目標。不過,請注意,如果您指定jetty:run,那麼這個目標將在兩個項目中運行,這可能不是您想要的。

您可以找到有關此功能在這裏的更多信息:http://maven.apache.org/guides/mini/guide-multiple-modules.html

+0

完全不起作用,因爲'jetty'插件在所有模塊中都不可用。沒有其他解決方案嗎? – 2012-07-27 11:48:23

相關問題