【发布时间】:2012-02-19 05:06:30
【问题描述】:
我有一个带有模块依赖链的相对较大的 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>
在模块A 上运行mvn compile –Dbuild.number=9.9.9.9:它将查找模块B-9.9.9.9.jar,但它会查找模块C-0.0.0.dev.jar。这是因为 build.number 属性不可传递(与实际版本号不同)。
我的问题:如何获得所需的行为?在命令行不传递其他参数的情况下,使用默认版本号构建一个 jar,但允许以该模块将用于具有相同版本的其他模块的方式覆盖该默认值。
【问题讨论】:
-
Module 和 Dependency 在 Maven 中有非常具体的含义。命令行上的属性将传播到当前反应器中正在构建的所有模块。
moduleB是ModuleA的依赖和模块还是只是一个依赖?
标签: maven dependencies