gpt4 book ai didi

maven-2 - Maven : property substitution not done for/project/version tag of pom?

转载 作者:行者123 更新时间:2023-12-03 14:39:37 25 4
gpt4 key购买 nike

http://maven.apache.org/pom.html#Properties说属性“值可以在 POM 中的任何地方访问”。

这应该读作“在 POM 中的大多数地方都可以访问”吗?

我可以像这样指定依赖项的版本没问题:

<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>${junit.version}</version>
<scope>test</scope>
</dependency>

但是项目本身的版本是这样的:
<project xmlns="http://maven.apache.org/POM/4.0.0" ...>

<modelVersion>4.0.0</modelVersion>
<groupId>com.mycompany.app</groupId>
<artifactId>my-app</artifactId>
<version>${myversion}</version>

<properties>
<myversion>8</myversion>
</properties>

<modules>
<module>alpha</module>
<module>beta</module>
</modules>
...

如果我尝试这个 不会取值 8。这里我在 pom 中定义了 ${myversion} 但如果我在命令行上指定 -Dmyversion=8 似乎也是如此。

如果其中一个模块使用硬编码的版本号指定其父级,如下所示:
<parent>
<groupId>com.mycompany.app</groupId>
<artifactId>my-app</artifactId>
<version>8</version>
</parent>

当我尝试构建时,当 maven 来查看模块的 pom 时,它会说它找不到版本 8 的给定父 pom。

但是,如果我也将父版本中的版本硬编码为 8,而不是使用 ${myversion},那么一切正常。

所以在我看来,父 pom 的/project/version 标记不会发生属性替换。

是这种情况还是对我似乎看到的情况有其他解释?

问候,

/乔治

最佳答案

/project/parent/(groupId|artifactId|version) 中不允许属性替换或在 /project/(groupId|artifactId|version) Maven 2.x 中的设计。

所以规则是:

  • 硬编码顶部的版本project/version元素。
  • 硬编码 project/parent/version 中的版本 child 元素。
  • child 继承版本,除非他们想覆盖它
  • 因此不需要 ${myversion}房产
  • 使用 ${project.groupId}${project.version}对于模块间的依赖关系。

  • 您会在 maven 用户列表中找到关于此主题的无限数量的线程(例如,参见 Pom Parent Version Properties),我只想说任何解决上述规则的尝试都是错误的并且不起作用。

    少版本 parent将在 Maven 3.1 中被允许。

    也可以看看
  • MNG-624
  • 关于maven-2 - Maven : property substitution not done for/project/version tag of pom?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3684664/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com