我有一个相对较大的具有模块依赖关系链的maven项目,我试图通过Jenkins自动完成构建过程,该过程使用版本号上传模块jar文件。在这样做的时候,如果没有为命令行maven调用指定参数,我仍然希望模块具有默认的版本号(默认为0.0.0.dev)。具有相同版本号的Maven依赖关系链
我第一次尝试<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>
运行mvn compile –Dbuild.number=9.9.9.9
上moduleA:它会寻找moduleB-9.9.9.9.jar,但它会寻找moduleC-0.0.0.dev.jar。这是因为build.number属性不是可传递的(不像实际的版本号)。
我的问题:我如何获得所需的行为?由于没有在命令行上传递额外的参数,因此使用默认版本号构建一个jar,但允许以该模块针对具有相同版本的其他模块的方式覆盖该默认值。
模块和依赖在Maven中有非常明确的含义。命令行***上的属性将传播***到当前反应堆中正在构建的所有模块。 'moduleB'是'ModuleA'的依赖项和模块还是只是依赖项? – Dev