Maven版本未在.POM文件中更新

时间:2013-09-26 07:28:05

标签: maven dependencies version parent pom.xml

我正在使用Maven来构建我的代码。我创建了基于模块的maven结构,如下所示

  • 父-POM
    • 子Parent1
      • SP1_Child1
      • SP1_Child2
      • SP1_Child3
    • 子Parent2
      • SP2_Child1
      • SP2_Child2
      • SP2_Child3

我的所有模块版本和外部依赖项版本都在父POM中维护。一切工作正常,当我做一个完整的安装MVN,但是当我尝试建立一个子模块像SP1_Child1,然后构建失败,因为它不能识别它的依赖的版本。我检查了本地机器中的maven存储库,并且我的所有模块都已安装,但.POM文件没有版本号。这可能是因为父POM上的mvn安装位置没有将$ {module.version}替换为子模块的实际版本。

父-POM

<project ..>  

  <groupId>the.company.project</groupId>
  <artifactId>Parent-POM</artifactId>
  <version>1.0-SNAPSHOT</version>
  ...

  <properties>
     <module.version>1.0</module.version>
  </properties>

</project>

SP1_Child1

<project ..>  

  <parent>
  ...
  </parent>

  <groupId>the.company.project</groupId>
  <artifactId>SP1_Child1</artifactId>
  <version>${module.version}</version>
  ...

</project>

我的mvn如何安装更新maven存储库中的.POM文件中的版本?或者如何在没有任何版本错误的情况下运行我的子模块?

2 个答案:

答案 0 :(得分:2)

子pom的默认布局应该如下所示。

<project ..>  

  <parent>
    <groupId>the.company.project</groupId>
    <artifactId>SP1_Child1</artifactId>
    <version>1.0-SNAPSHOT</version>
  </parent>

  <groupId>the.company.project</groupId>
  <artifactId>SP1_Child1</artifactId>
  ...

</project>

但是,您的孩子不应仅在父元素中单独定义版本而不使用属性。该版本将自动从父级继承到子模块。如果您拥有相同的组,则也不需要在子组中定义组。您可以像这样使用它:

<project ..>  

  <parent>
    <groupId>the.company.project</groupId>
    <artifactId>SP1_Child1</artifactId>
    <version>1.0-SNAPSHOT</version>
  </parent>

  <artifactId>SP1_Child1</artifactId>

  ...

</project>

答案 1 :(得分:1)

从父级获取SP1_Child1版本对您来说非常烦人,因为它会强制您为任何新版本的SP1_Child1项目安装新版本的父版本。

有两种不同的可能情况:

  • 您希望能够管理具有不同生命周期的不同项目。 然后在SP1_Child1项目中指定一个版本,并指定要由父POM中的其他项目使用的SP1_Child1的版本(在这种情况下,2个值可以不同)。

  • 您的应用程序是单片的,即使它是为了方便而组织在不同的模块中。那么在这种情况下,最好是做khmarbaise建议的事情,为你的所有项目保留一个版本,并从父母继承版本。