Maven - 获取不可继承的pom版本。

时间:2015-09-11 12:17:54

标签: maven inheritance pom.xml

假设版本为1.0的父pom和版本为2.0的子pom。

现在我在父母中定义这样的依赖。

<dependency>
   <groupId>somedep</groupId>
   <artifactId>somedep</artifactId>
   <version>${project.version}</version>
</dependency>

在父级中,版本的计算结果为1.0,但在子级中,它的计算结果为2.0。有没有办法,我可以让它在孩子中评价为1.0(当然,不允许在父母中使用版本进行编码)?

1 个答案:

答案 0 :(得分:1)

编辑:

如果我们查看http://maven.apache.org/guides/introduction/introduction-to-the-pom.html#Project_Inheritance,我们可以看到:

  

要注意的一个因素是这些变量在之后处理   继承如上所述。这意味着如果是父项目   使用变量,然后在子节点中定义它,而不是父节点,   将是最终使用的那个。

这意味着你不能依赖在父和子中动态解析的变量,并且如果你的孩子和父母有不同的版本,则属于`$ {project.version}类型,这通常不是你和#39; d想要但非常具体你的情况。我想你剩下的就是使用像dependdencyManagement这样的东西来硬编码父依赖:

父:

<project>
   <groupId>example</artifactId>
   <artifactId>masta</artifactId>
   <version>1.0</version>
   <dependencyManagement> 
      <dependencies>
          <dependency>
              <groupId>someDep</groupId>
              <artifactId>someDep</artifactId>
              <version>1.0</version>
          </dependency>
      </dependencies>
   </dependencyManagement>
   <dependencies>
      <dependency>
         <groupId>someDep</groupId>
         <artifactId>someDep</artifactId>
       </dependency>
   </dependencies>
</project>

孩子:

<project>
   <parent>
      <groupId>example</artifactId>
      <artifactId>masta</artifactId>
      <version>1.0</version>
   </parent>
   <groupId>example.masta</artifactId>
   <artifactId>child</artifactId>
   <version>2.0</version>
   <dependencies>
      <dependency>
         <groupId>someDep</groupId>
         <artifactId>someDep</artifactId>
       </dependency>
   </dependencies>
</project>

或者确实在孩子身上明确使用${parent.version}。有一点需要注意的是,我通常没有聚合器项目,如父引入任何依赖项,但只有dependencyManagement。

这是第二种方法,没有依赖关系管理:

家长:

  <project>
       <groupId>example</artifactId>
       <artifactId>masta</artifactId>
       <version>1.0</version>
       <dependencies>
          <dependency>
             <groupId>someDep</groupId>
             <artifactId>someDep</artifactId>
             <version>${project.version}</version>
           </dependency>
       </dependencies>
    </project>

孩子:

   <project>
       <parent>
          <groupId>example</artifactId>
          <artifactId>masta</artifactId>
          <version>1.0</version>
       </parent>
       <groupId>example.masta</artifactId>
       <artifactId>child</artifactId>
       <version>2.0</version>
       <dependencies>
          <dependency>
             <groupId>someDep</groupId>
             <artifactId>someDep</artifactId>
             <version>${parent.version}</version>
           </dependency>
       </dependencies>
    </project>

但我猜这些方法实际上都没有完全满足你的需求。