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

具有相同版本号的Maven依赖项链,maven,dependencies,Maven,Dependencies,我有一个带有模块依赖链的相对较大的maven项目,我正试图通过Jenkins自动化构建过程,Jenkins上传带有版本号的模块jar文件。在执行此操作时,如果没有为命令行maven调用指定参数,我仍然希望模块具有默认版本号(默认为0.0.0.dev) 我首先尝试了0.0.0.dev,认为我可以用maven命令行覆盖这个值。事实证明并非如此:。有一条注释引导我进行下一次尝试:${build.number}在这里,我将把内部版本号传递给命令行。显然,由于该属性没有在其他任何地方设置,如果没有提供内部

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

我首先尝试了
0.0.0.dev
,认为我可以用maven命令行覆盖这个值。事实证明并非如此:。有一条注释引导我进行下一次尝试:
${build.number}
在这里,我将把内部版本号传递给命令行。显然,由于该属性没有在其他任何地方设置,如果没有提供内部版本号,我会得到诸如module.name-${build.number}.jar之类的jar。简单修复:如注释所示,添加
0.0.0.dev

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

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

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


我的问题是:我怎样才能获得想要的行为?在命令行中不传递其他参数的情况下,使用默认版本号构建一个jar,但允许以模块将用于相同版本的其他模块的方式覆盖该默认值。

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

模块和依赖关系在Maven中有非常特殊的含义。命令行上的属性将传播到当前reactor中构建的所有模块。
moduleB
是一个依赖项和
ModuleA
的模块,还是仅仅是一个依赖项?