0

我已经开始学习 Maven 并且有以下问题:

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

因此,尽管我在 POM 中指定了以下依赖项

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

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

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

谢谢!

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

4

4 回答 4

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>
于 2012-04-18T13:29:16.877 回答
0

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

于 2012-04-24T09:46:23.767 回答
0

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

于 2015-07-14T23:41:29.833 回答
-1

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

于 2012-04-18T13:03:55.627 回答