编译构建 CloudBuild编译构建 CloudBuild

文档首页> 编译构建 CloudBuild> 常见问题> Maven构建> 多个子项目和父项目之间的引用问题
更新时间:2021/07/27 GMT+08:00
分享

多个子项目和父项目之间的引用问题

问题现象

异常信息如下:

1
2
3
4
5
[ERROR] Project 'xxx.xxx:xxx1:1.0-SNAPSHOT' is duplicated in the reactor @
[2019-07-02 14:02:52.656] [ERROR] Project 'xxx.xxx:xxx2:1.0-SNAPSHOT' is duplicated in the reactor -> [Help 1]
[2019-07-02 14:02:52.656] [ERROR]
[2019-07-02 14:02:52.656] [ERROR] To see the full stack trace of the errors, re-run Maven with the -e switch.
[2019-07-02 14:02:52.656] [ERROR] Re-run Maven using the -X switch to enable full debug logging.

原因分析

在Maven中,parent模块组织好childA和childB,叫做"聚合"。多个模块联合编译实现起来很简单,按照以下方式即可:

  1. 在parent的pom文件里加入以下内容:
    <modelVersion>4.0.0</modelVersion>
    <groupId>com.demo</groupId>
    <artifactId>parent</artifactId>
    <version>1.0</version>
    <modules>
       <module>childA</module>
       <module>childB</module>
    </modules>
  2. 在childA和childB的pom文件中添加相应的标签来标记父模块。
    • childA:
      <modelVersion>4.0.0</modelVersion>
      <groupId>com.demo</groupId>
      <artifactId>childA</artifactId>
      <version>1.0</version>
      <parent>
         <groupId>com.demo</groupId>
         <artifactId>parent</artifactId>
         <version>1.0</version>
      </parent>
    • childB:
      <modelVersion>4.0.0</modelVersion>
      <groupId>com.demo</groupId>
      <artifactId>childB</artifactId>
      <version>1.0</version>
      <parent>
         <groupId>com.demo</groupId>
         <artifactId>parent</artifactId>
         <version>1.0</version>
      </parent>

在上述的配置形式中指定了一个父项目,下面有两个同级的子项目A和B,如果A项目的pom文件中把B项目当做自己的子项目来引用或者把parent项目来作为子项目就会引起冲突,构建时就是出现上面的报错。

处理办法

检查项目的pom的引用情况 ,如果真的要B项目作为A的子项目,则需要从parent的pom中把B项目的引用去掉,把B项目的父标签指向A项目,变成下面的这种形式:

  • parent项目:
    <modelVersion>4.0.0</modelVersion>
    <groupId>com.demo</groupId>
    <artifactId>parent</artifactId>
    <version>1.0</version>
    <modules>
       <module>childA</module>
    </modules>
  • A项目:
    <modelVersion>4.0.0</modelVersion>
    <groupId>com.demo</groupId>
    <artifactId>childA</artifactId>
    <version>1.0</version>
    <parent>
       <groupId>com.demo</groupId>
       <artifactId>parent</artifactId>
       <version>1.0</version>
    </parent>
    <modules>
       <module>childB</module>
    </modules>
  • B项目:
    <modelVersion>4.0.0</modelVersion>
    <groupId>com.demo</groupId>
    <artifactId>childA</artifactId>
    <version>1.0</version>
    <parent>
       <groupId>com.demo</groupId>
       <artifactId>childA</artifactId>
       <version>1.0</version>
    </parent>
分享:

Maven构建 所有常见问题

more