Maven:依赖关系的动态规范

时间:2012-04-18 12:48:04

标签: maven-3

我已经开始学习Maven,并提出以下问题:

我想动态指定构建maven项目的依赖项,而不是使用POM中指定的依赖项 - 有没有办法做到这一点?

所以虽然我在POM中指定了以下依赖项

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

我想在build命令中指定我想使用不同的版本。 有没有办法指定这个?

我的想法是,我希望在Jenkins中进行集成构建,并依赖于特定分支的系统的最新可用快照。该快照尚未发布到maven存储库,因此我想在Jenkins中获取它并为mvn build指定依赖项。

谢谢!

可能的解决方案:我最终得到的是使用$ {my.lib.version}构造并在调用mvn时使用-Dmy.lib.version = 1.0-SNAPSHOT指定它。因此,我可以通过从svn获取任意快照版本的依赖项并将其快照版本提供给集成构建pom,将其用于Jenkins集成构建。

4 个答案:

答案 0 :(得分:3)

Maven可以在配置文件的帮助下使用“动态”指定的属性(例如: group.ProjectComponent.version )。

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

因此,如果您创建一些配置文件,您可以在它们之间切换(请参阅maven参考)

示例:

<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>

答案 1 :(得分:0)

不,您无法动态更改依赖项。此外它没有意义,因为你希望有一个可重复的构建。

答案 2 :(得分:0)

我最终得到的是使用$ {my.lib.version}构造并在调用mvn时使用-Dmy.lib.version = 1.0-SNAPSHOT指定它。因此我可以将它用于Jenkins集成构建从svn获取任意快照版本的依赖项并将其快照版本提供给集成构建pom。

答案 3 :(得分:0)

我正在寻找类似的东西。在我的情况下,相同的应用程序代码正在不同的堆栈上重用,这意味着使用不同的“驱动程序”来访问数据。虽然驱动程序实现相同的接口,但它们确实来自不同的工件。