具有相同版本号的Maven依赖链

时间:2012-01-26 00:28:09

标签: maven dependencies

我有一个带有模块依赖关系链的相对较大的maven项目,我正在尝试通过Jenkins自动化构建过程,该过程使用版本号上传模块jar文件。在执行此操作时,如果没有为命令行maven调用指定参数,我仍然希望模块具有默认版本号(默认为0.0.0.dev)。

我首先尝试<version>0.0.0.dev</version>确定我可以使用maven命令行覆盖此值。结果并非如此:http://jira.codehaus.org/browse/MINSTALL-30。有一条评论引导我进行下一次尝试:<version>${build.number}</version>我会将内部版本号传递给命令行。显然,因为该属性未在其他任何地方设置,如果没有提供构建号,我会得到诸如module.name - $ {build.number} .jar之类的jar。简单修复:正如评论建议的那样,添加<properties><build.number>0.0.0.dev</build.number></properties>

当我尝试将该版本传播到模块依赖项时,这会导致传递问题。假设我有moduleA依赖于moduleB依赖于moduleC,我要求每个都具有相同的版本号。依赖示例:在moduleA的pom文件中:

<dependency>
    <groupId>groupID</groupId>
    <artifactId>moduleB</artifactId>
    <version>${version}</version>
</dependency>

在moduleA上运行mvn compile –Dbuild.number=9.9.9.9:它将查找moduleB-9.9.9.9.jar,但它将查找moduleC-0.0.0.dev.jar。这是因为build.number属性不可传递(与实际版本号不同)。

我的问题:我怎样才能获得理想的行为?如果没有在命令行传递其他参数,请使用默认版本号构建一个jar,但允许以模块为具有相同版本的其他模块的方式覆盖该默认值。

1 个答案:

答案 0 :(得分:2)

除了一个例外,您无法将属性传播到依赖关系的pom中。对于所有意图和目的,依赖关系的pom在安装/部署到本地/远程存储库时是固定的。如果通过reactor解析依赖关系(即依赖关系是作为当前构建的一部分构建的),那么命令行属性将在构建时传播到该依赖关系pom。