2012-04-18 269 views
0

我已經開始學習Maven和有以下問題的動態規格:Maven的:依賴

我想動態指定用於構建Maven項目,而不是使用的POM中指定的依賴關係的依賴關係 - 有什麼辦法要做到這一點?

所以,雖然我在POM

... 
<dependencies> 
<dependency> 
<groupId>group</groupId> 
<artifactId>ProjectComponent</artifactId> 
<version>1.0</version> 
</dependency> 
... 

指定以下依存我想,我想用一個不同版本的內部命令來指定。 有沒有辦法指定它?

這個想法是,我想要在Jenkins中進行集成構建,並依賴於特定分支的系統的最新可用快照。該快照尚未發佈到Maven存儲庫,所以我想在Jenkins中獲取它並指定mvn構建的依賴項。

謝謝!

可能的解決方案:我最終得到的是打電話來MVN時使用$ {} my.lib.version建設,並指定其與-Dmy.lib.version = 1.0快照」因此我可以使用它爲Jenkins集成構建,通過從svn獲取依賴關係的任意快照版本並將它們的快照版本提供給集成構建pom。

+0

你有什麼打算有一個動態的依賴?你能解釋一點嗎? – khmarbaise 2012-04-18 13:04:18

+0

@khmarbaise這個想法是,我想要在Jenkins中進行集成構建,並依賴於特定分支的系統的最新可用快照。該快照尚未發佈到Maven存儲庫,所以我想在Jenkins中獲取它並指定mvn構建的依賴項。 – Hippopotamus 2012-04-18 13:27:48

+0

最好的解決方案是使用SNAPSHOT版本來達到這個目的。 – khmarbaise 2012-04-18 13:56:57

回答

0

我最終得到的是使用$ {my.lib。版本}構造,並在調用mvn時使用-Dmy.lib.version = 1.0-SNAPSHOT指定它。因此,我可以通過從svn獲取依賴關係的任意快照版本並將它們的快照版本提供給集成構建來將它用於Jenkins集成構建pom。

0

不,您不能動態更改依賴關係,而且它沒有意義,因爲您想有一個可重複的版本

+0

實際上,你可以,你可以指定它像-Dmy.lib.version = 1.0-SNAPSHOT「(如建議),如果你有一個依賴的書面作爲$ {my.lib。版本} – Hippopotamus 2012-04-24 09:43:07

+0

這將使你的構建不可重現。在我看來,這是一個不行。 – khmarbaise 2012-04-24 10:13:44

3

Maven可以使用「動態」指定的屬性(例如:group.ProjectComponent.ve rsion)在配置文件的幫助下。

<dependencies> 
    <dependency> 
    <groupId>group</groupId> 
    <artifactId>ProjectComponent</artifactId> 
    <version>${group.ProjectComponent.version}</version> 
</dependency> 

所以,如果你創建一些配置文件可能會在它們之間切換(請參閱參考資料行家)

例子:

<profile> 
    <id>stable-builds</id> 
    <properties> 
     <group.ProjectComponent.version>1.0</group.ProjectComponent.version> 
    </properties> 
    <activation> 
     <activeByDefault>true</activeByDefault> 
    </activation> 
</profile> 

<profile> 
    <id>beta-builds</id> 
    <properties> 
     <group.ProjectComponent.version>2.0.Beta1</group.ProjectComponent.version> 
    </properties> 
    <activation> 
     <activeByDefault>false</activeByDefault> 
    </activation> 
</profile> 
+0

謝謝!你有沒有機會知道是否有一種方法可以從命令行爲mvn提供依賴關係的值?或者它需要搞亂poms? – Hippopotamus 2012-04-18 13:33:11

+1

傳遞系統屬性「mvn clean test -Dmy.lib.version = 1.0-SNAPSHOT」儘管可以這樣做,但它可能是個壞主意,因爲它很容易強制項目使用任意版本的依賴項,只需重寫此屬性。 – 2012-04-20 06:29:10

+0

@Kal謝謝,這正是我已經決定要做的。 – Hippopotamus 2012-04-24 09:41:14

0

剛剛遇到這個,因爲我正在尋找類似的東西。在我的情況下,相同的應用程序代碼正在不同的堆棧上重用,這意味着使用不同的「驅動程序」來訪問數據。雖然驅動程序實現相同的接口,但他們確實來自不同的工件。