【问题标题】:Error throwing while substituting variable for version in pom.xml在 pom.xml 中用变量替换版本时抛出错误
【发布时间】:2022-01-09 07:03:40
【问题描述】:

我在用变量替换 pom.xml 文件中父块中的版本时遇到错误。

对于属性选项卡,它工作正常,但是当我将版本更改为在父块中的“mvn clean install”之前导出的变量时,构建会失败。

错误如下所示。

“由 org.sonatype.aether.transfer.ArtifactTransferException 引起:无法将工件 org.springframework.boot:spring-boot-starter-parent:pom:${env.SPRINGBOOTVERSION} 从/到 abc -repos (https://continuousintegration.abc.com/artifactory/abc-repos): 路径中索引 122 处的非法字符:https://continuousintegration.abc.com/artifactory/abc-repos/org/springframework/boot/spring-boot-starter-parent/${env.SPRINGBOOTVERSION}/spring-boot-starter-parent-${env.SPRINGBOOTVERSION}.pom"

在解析 pom.xml 之前,不会为父 pom 替换变量。


下面是被替换的 pom.xml 的代码块。

<parent>
        <artifactId>spring-boot-starter-parent</artifactId>
        <groupId>org.springframework.boot</groupId>
        <version>${env.SPRINGBOOTVERSION}</version> ---------> replaced version by variable
        <relativePath />
    </parent>

这里的 maven 版本是 3.0.5 ---(尝试使用 3.8.1 进行本地构建)

对此的任何解决方案都会有所帮助。

仅供参考:

变量以以下格式存储在文件中。

---> 导出 SPRINGBOOTVERSION=1.2.3

然后使用 source 命令获取到 shell。

另外,在 pom.xml 的属性块中给出的变量是 被maven接受,它也在工作。只是有问题 这里是父块。

【问题讨论】:

  • 真的使用 Maven 3.0.5 吗?使用 8 年以上的旧软件...还问你为什么喜欢在这里使用变量版本?
  • 即使它不适用于 3.8.1,我也在本地构建时尝试过。
  • 对于 3.8.1 也在这里遇到同样的错误
  • 对此的简单回答是:不可能。我的问题一直是:你喜欢做什么?您要解决的问题是什么?
  • 我需要将所有依赖项作为变量存储在一个文件中,这样,每个更新的版本都很容易更改,因此,我们只需要更改 1 个文件,而不是整个 pom文件。因此,所有版本都添加到 var.env 文件中并在 pom.xml 中替换,因此,如果有任何更改,我们只需要更改 var.env。

标签: java spring-boot maven maven-2


【解决方案1】:

为了澄清,您正在设置替换变量的值:

SPRINGBOOTVERSION

以某种方式在您的环境中,即作为运行命令的 shell 中的环境变量,它不起作用?

【讨论】:

  • 我创建了一个 var.env 并在此处添加了所有依赖项,并一直调用此文件“source var.env”,而不是那个地方的值,以便它将存储在shell,从那里开始,依赖项的值在 pom.xml 中得到更新但是她在父块的情况下,它抛出了上述错误。
  • 好的,我明白了。所以你在终端运行source var.env,然后从同一个终端运行你的maven命令?看起来变量替换没有发生。
  • 没错,就是这个问题,但不知道为什么没有发生。
【解决方案2】:

IMO,maven 永远不会支持您想要的行为,原因是当您执行 mvn installmvn deploy 时,maven 会将工件与 pom 文件一起部署到本地或远程存储库中,但有关您构建的信息环境(即${env.SPRINGBOOTVERSION})没有存储在任何地方,因此,它不是错误或缺少功能 - maven 只是防止在 maven 存储库中存储无效的 pom 文件。

【讨论】:

  • 这里,我已经将所有依赖版本存储在 var.env 文件中,并将其来源到 shell。在属性块的 pom.xml 中,替换变量正在工作,但在父块中,它在上面抛出了一个错误。例如。在 var.env 文件中导出 SPRINGBOOTVERSION=1.2.3,然后通过命令 source var.env 将该文件提供给 shell。 version 的值存储在 shell 中。
  • 为什么要将这些信息存储到外部文件中。 pom.xml 正是这些信息的位置和目的...
猜你喜欢
  • 2019-01-15
  • 2012-06-14
  • 2015-03-11
  • 2019-02-23
  • 2011-09-29
  • 1970-01-01
  • 2014-09-20
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多