java - Maven 忽略子 pom 中的变量

标签 java build maven-3

我已经被这个问题困扰了一段时间了。 我正在尝试自动构建和部署(在 nexus3 中)几个 java 模块,并消除在项目 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

在 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 home: /usr/share/maven Java version: 1.8.0_212, vendor: Oracle Corporation, runtime: /usr/lib/jvm/java-1.8.0-openjdk-1.8.0.212.b04-0.fc29.x86_64/jre Default locale: pt_BR, platform encoding: UTF-8 OS name: "linux", version: "5.0.17-200.fc29.x86_64", arch: "amd64", family: "unix"

最佳答案

您应该使用release plugin去做这个。 mvn 发布:更新版本 -DautoVersionSubmodules=true

关于java - Maven 忽略子 pom 中的变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56400615/

相关文章:

java - 创建 Artifact 别名而不复制完整的项目模块

java - 如何使用 Gradle 构建我的多项目 Java 软件

Reactjs -/dist 文件夹只有 2 个文件 - bundle.js 和 bundle.js.map - 不包含任何其他文件

java - 从终端运行时出现 Maven MultiModule 项目错误

java - Logback线程池

java - 使用Azure的java sdk创建VM并标记所有相关资源

java - 如何使用 apt-get 在 Ubuntu 18.04/17.04/16.10/16.04 LTS/15.10/15.04/14.10/14.04 LTS/13.10/13.04 上安装 Maven 3?

java - 是否可以与依赖项目共享构建 Maven 配置文件属性

javac 无效标志

javascript - 最简单的 Gruntfile.coffee 可以证明 grunt 正在工作吗?