2012-01-13 88 views
0

我剛剛完成將我們的一個內部框架項目從ant轉換爲maven。 Maven構建運行正常,並且沒有問題地部署到我們的存儲庫。如何設置maven框架頂級pom

問題是當其他項目嘗試使用框架時,它不起作用。唯一下載的是頂級框架pom。

我已經嘗試將一些依賴項添加到一個或多個各種模塊,但無論我添加哪一個,我都會得到一個循環依賴錯誤。我也嘗試創建一個沒有模塊和一些依賴項的第二個頂級pom文件來覆蓋存儲庫管理器中的一個。這會導致一些依賴被下載,但是隨後maven的構建會隨機掛起。基於Windows任務管理器,它看起來像一個無限循環。所以第二個pom文件似乎不是答案(或者我做錯了)。

我的框架POM文件看起來是這樣的:

<project> 
    <modelVersion>4.0.0</modelVersion> 

    <groupId>framework_snt</groupId> 
    <artifactId>SFP</artifactId> 
    <packaging>pom</packaging> 
    <name>SFP framework</name> 
    <version>6.3</version> 

    <modules> 
.... 50+ modules here 
    </modules> 

,然後通常屬性,相關的管理和pluginManagement條目頂級POM。

消費模塊中

我只是有以下幾點:

<dependency> 
    <groupId>framework_snt</groupId> 
    <artifactId>SFP</artifactId> 
    <version>6.3</version> 
    <type>pom</type> 
</dependency> 

這是在頂層POM因此,所有子模塊可以訪問框架庫,這使得它的開發者更加容易。

如何進行設置以便所有相關的jar文件將由我的消費項目下載?

回答

2

聽起來像你的框架項目產生幾個jar工件,每個子模塊一個,但沒有父項目jar工件。因此,聲明對父項目的pom的依賴並不是你想要做的。相反,您需要聲明對每個框架項目的子模塊的依賴關係。

我有一個類似的設置,我有一個「工具箱」項目與幾個模塊(每個產生一個罐子神器)。然後在我的其他項目中,我聲明瞭我需要使用的任何模塊的依賴關係。然而,我並不聲明依賴於我的「工具包」父項目文件。相反,我只是聲明子模塊jar工件的依賴關係。

<dependency> 
    <groupId>com.mycompany.toolkits</groupId> 
    <artifactId>file-utils</artifactId> 
    <version>1.0.0</version> 
</dependency> 

注意,像你這樣我的依賴性聲明指向我的孩子模塊之一,並沒有聲明<type>pom</type>。如果你想要非常明確,你可以聲明<type>jar</type>

+0

是的,這是一種完成任務的方式,但是在轉換我們現有的ant構建時,每個人都習慣於包含「框架」,並且始終可以使用所有50個jar文件。 – Jon 2012-01-19 18:54:29

+0

我看到,你可以嘗試讓一個子模塊(稱爲「framework-all」或其他)聲明所有其他子模塊的依賴關係。然後你的開發人員應該能夠聲明對這個子模塊的依賴,並且maven將會把其他的依賴作爲傳遞依賴。 – BenjaminLinus 2012-01-19 20:38:24

+0

我最終在這個上使用了一個變體。我保留頂級聚合器pom用於構建和部署。但GAV與應用程序使用的不一樣。然後我在一個新文件夾中創建了一個新的pom。這一個包含應用程序的「正確」GAV,並且沒有模塊,只有依賴關係。這到目前爲止有效 – Jon 2012-02-06 19:33:12

-1

您所稱的framework pom是您的多模塊項目的parent pom。

雖然模塊可以相互依賴,但它不能依賴於這個父pom。這是可能導致循環依賴的原因。

您需要重新查看您的模塊,並確定哪些模塊依賴哪些模塊並適當指定依賴關係。另外,這些依賴關係通常是jar依賴項 - 一個包含源和資源的包裝。

Maven By Example是提供更多信息的許多可用資源之一。

+0

不是很有幫助 - 但謝謝你的嘗試。我仍然需要一種方式讓其他項目使用框架及其所有依賴的jar文件。 – Jon 2012-01-13 19:54:10

+0

@Jon好像你正在尋找通配符的方法。您不能在包裝類型中包含與pom相關的依賴項。 – 2012-01-19 12:48:30

+0

@Keerthi - 實際上我可以擁有一個pom作爲依賴關係,並且我將其廣泛用於第三方庫中的多模塊項目。然後,我只在消費項目中有1個條目,使消費者的pom文件更清潔。但在這種情況下,即時建立jar文件,同樣的方法不起作用。 – Jon 2012-01-19 18:56:21