可以将父版本作为属性提供给孩子吗?

Ser*_*rog 7 java dependencies dependency-management pom.xml maven

这是关于Maven POM的

如果我希望我的父版本也是我的依赖版本,我必须设置一个属性值为$ {project.parent.version}.

问题然后发生在我的主POM的一个Child(其中包含$ {project.parent.version}属性,因为它是Parent而它是一些我不管理的Project)重新计算属性并认为创建的值属性现在是我的主POM的版本.

--SuperParent (not in my Administration) | Version = 1.2.3

----MainPom | Version = 1.0.0 | Property <test>${project.parent.version}</test> -> 1.2.3

------Child Pom | Version 1.0.0 | Property ${test} is now 1.0.0
Run Code Online (Sandbox Code Playgroud)
<project>
<!-- Super Pom -->
 <groupId>groupId</groupId>
    <artifactId>artifactId</artifactId>
    <version>1.2.3</version>
</project>

<project>
<!-- MainPom -->
    <groupId>othergroupId</groupId>
    <artifactId>otherartifactId</artifactId>
    <version>1.0.0</version>
    <parent>
         <groupId>groupId</groupId>
         <artifactId>artifactId</artifactId>
         <version>1.2.3</version>
     </parent>
     <properties>
     <dependency.version>${project.parent.version}</dependency.version>
     </properties>
     <dependencyManagement>
        <dependencies>
            <dependency>
                <groupId>dependencyGroupId<groupId>
                <artifactId>dependency</artifactId>
                <version>${dependency.version}</version>
            </dependency>
        </dependencies>
     </dependencyManagement>
</project>
<project>
<!-- ChildPom -->
    <groupId>childGroupId</groupId>
    <artifactId>childArtifactId</artifactId>
    <version>1.0.0</version>
    <parent>
         <groupId>othergroupId</groupId>
         <artifactId>otherartifactId</artifactId>
         <version>1.0.0</version>
     </parent>
        <dependencies>
            <dependency>
                <groupId>dependencyGroupId<groupId>
                <artifactId>dependency</artifactId>
            </dependency>
        </dependencies>
</project>
Run Code Online (Sandbox Code Playgroud)

在End是Child Pom 1.0.0中的Property $ {dependency.version}而不是1.2.3.这是Maven的通缉行为吗?我能做些什么才能让它发挥作用?

无法改变的事情:

  • SuperPom
  • 主要Pom版本

Vin*_*ius 6

Maven首先继承流程以构建有效的pom,然后扩展流程变量。

换句话说,父和子pom内容被作为每个子pom的单个合并文件处理。因此,当处理您的子pom时,$ {project.parent.version}是1.0.0,而不是1.2.3。

我找不到引用pom的“祖父母”的方法,因此似乎唯一的解决方案是将版本作为静态数字同时放在parent.version和properties.dependency.version中。

  • 这绝对令人沮丧。 (2认同)