【发布时间】:2019-10-17 10:19:04
【问题描述】:
我被这个问题困扰了一段时间。 我正在尝试自动化几个 java 模块的构建和部署(在 nexus3 中),并消除在项目 pom 中手动设置模块版本的需要。
我的问题是 maven 忽略了 pom 文件中的变量。
父 pom:
<properties>
<revision>local</revision>
</properties>
<name>lib-cloud</name>
<groupId>com.company.lib</groupId>
<artifactId>lib-cloud</artifactId>
<version>${revision}</version>
<packaging>pom</packaging>
<modules>
<module>lib-cloud-main</module>
</modules>
和孩子 pom:
<properties>
<unrelatedVAR>2017.3.3</unrelatedVAR>
</properties>
<parent>
<groupId>com.company.lib</groupId>
<artifactId>lib-cloud</artifactId>
<version>${revision}</version>
</parent>
<artifactId>lib-cloud-main</artifactId>
<name>lib-cloud-main</name>
然后我用:
mvn -Drevision=3.1 clean package deploy
这样构建代码就好了,创建一个lib-cloud-main/target/lib-cloud-main-3.1.jar
在罐子里,我已经看到了 lib-cloud-main-3.1.jar/maven/com.company.lib/lib-cloud-main/pom.xml 有
<version>${revision}</version>
正如我所期望的那样,作为版本,而不是 3.1,但这个工件仍然设法保存在 nexus 中。
但是,如果我尝试使用它,maven 在尝试获取 pom 时会抛出错误:
[ERROR] Failed to execute goal on project core-backend-api: Could not resolve dependencies for project com.company.core:core-backend-api:jar:local: Failed to collect dependencies at com.company.lib:lib-cloud-main:jar:3.1: Failed to read artifact descriptor for com.company.lib:lib-cloud-main:jar:3.1: Could not transfer artifact com.company.lib:lib-cloud:pom:${revision} from/to company-maven-public (http://mvn.company.local/repository/maven-public/): Failed to transfer file: http://mvn.company.local/repository/maven-public/com/company/lib/lib-cloud/$%7Brevision%7D/lib-cloud-$%7Brevision%7D.pom. Return code is: 400 , ReasonPhrase:Invalid repository path.
我什至尝试使用
mvn release:update-versions -DdevelopmentVersion=3.1
作为一种在构建之前用静态值覆盖 pom 的方法,但这种方法仍然无法触及任何项目子 pom 中的标签。
我做错了什么?
Apache Maven 3.5.4 (Red Hat 3.5.4-4) Maven 主页:/usr/share/maven Java 版本:1.8.0_212,供应商:Oracle Corporation,运行时: /usr/lib/jvm/java-1.8.0-openjdk-1.8.0.212.b04-0.fc29.x86_64/jre 默认语言环境:pt_BR,平台编码:UTF-8 操作系统名称:“linux”, 版本:“5.0.17-200.fc29.x86_64”,拱:“amd64”,家庭:“unix”
【问题讨论】: