Jenkins:Maven版本插件忽略依赖项分类器

时间:2018-08-19 10:57:03

标签: jenkins maven-3 maven-release-plugin

我想通过Jenkins发布一个使用依赖项的模块,该依赖项不仅通过其版本进行区分,而且还通过在构建时作为系统属性传递的自定义分类器进行区分。控制台输出中显示的有效pom显示使用了正确的分类器

<dependency>
  <groupId>de.test</groupId>
  <artifactId>common-module</artifactId>
  <version>0.0.4-SNAPSHOT</version>
  <classifier>custom</classifier>
  <scope>provided</scope>
</dependency>  

但是,当运行发行插件的prepare目标时,由于缺少仅在使用自定义分类器的依赖项版本中可用的类而导致的编译错误,因此构建中断。使用maven-antrun-plugin打印属性表明该发行插件正在使用不带分类器的版本。

[INFO] [echoproperties] de.test\:common-module\:jar=/var/lib/****/.m2/repository/de/test/common-module/0.0.4-SNAPSHOT/common-module-0.0.4-SNAPSHOT.jar
[INFO] [echoproperties] maven.dependency.de.test.common-module.jar.path=/var/lib/****/.m2/repository/de/test/common-module/0.0.4-SNAPSHOT/common-module-0.0.4-SNAPSHOT.jar

我希望发布插件能够拾取名为common-module-0.0.4-SNAPSHOT-custom.jar的jar,它肯定在maven存储库中可用。发行插件不支持分类器吗?

1 个答案:

答案 0 :(得分:0)

问题解决了。我发现有两个问题。首先,该模块也是传递依赖项的一部分,因此maven尝试下载一个没有分类器的版本,该版本在包含分类器的版本之前不存在。其次,分类器没有传递给Maven版本插件。要将系统变量传递给插件,必须使用arguments选项,因此实际命令应为clean install -Darguments="-Dmy-classifier=custom" -Dmy-classifier=custom -B release:prepare release:perform。系统变量声明必须是冗余的,一个用于pom依赖项,另一个用于release插件。