首页 > 解决方案 > Jenkins:maven 发布插件忽略依赖分类器

问题描述

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

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

但是,当发布插件的准备目标运行时,由于缺少仅在使用自定义分类器的依赖版本中可用的类而导致编译错误,构建中断。使用 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

我希望发布插件能够拾取命名的 jar ,该 jarcommon-module-0.0.4-SNAPSHOT-custom.jar在 maven 存储库中绝对可用。发布插件不支持分类器吗?

标签: jenkinsmaven-3maven-release-plugin

解决方案


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


推荐阅读