0

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

  • 父-POM
    • 子父母1
      • SP1_Child1
      • SP1_Child2
      • SP1_Child3
    • 子父母2
      • SP2_Child1
      • SP2_Child2
      • SP2_Child3

我所有的模块版本和外部依赖版本都在 Parent POM 中维护。当我进行完整的 mvn 安装时一切正常,但是当我尝试构建一个像 SP1_Child1 这样的子模块时,构建失败,因为它无法识别其依赖项的版本。我检查了本地机器上的 maven 存储库,我的所有模块都已安装,但 .POM 文件没有版本号。这可能是因为父 POM 上的 mvn install 没有将 ${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 install 如何更新 maven 存储库中 .POM 文件中的版本?或者我怎样才能在没有任何版本错误的情况下运行我的子模块之一?

4

2 回答 2

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>

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

<project ..>  

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

  <artifactId>SP1_Child1</artifactId>

  ...

</project>
于 2013-09-26T08:40:47.720 回答
1

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

有两种不同的可能情况:

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

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

于 2013-09-26T09:08:19.500 回答