具有n个依赖级别的多模块Maven Spring Boot项目

时间:2019-05-08 19:03:14

标签: java maven spring-boot multi-module

我正在玩Maven多模块Spring Boot(v2.1)项目,并认为我将是超级聪明的人,并且将模块嵌套在其他模块中。该项目的目的是运行不同的报告,在数据部分中,我想按类型划分报告以实现可管理性,还希望共享一些功能,如编写器和基类,因为它们将用于每个报告中

下面是层次结构的屏幕截图,但是基本上,我有一个父pom使用(跳过依赖项和构建部分): enter image description here

    <packaging>pom</packaging>
<modules>
    <module>adhoc-web</module>
    <module>adhoc-data</module>
</modules>
<parent>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-parent</artifactId>
    <version>2.1.4.RELEASE</version>
    <relativePath/> <!-- lookup parent from repository -->
</parent>

父pom的孩子是一个Web项目和一个数据项目。数据pom看起来像(跳过依赖项和构建部分):

    <parent>
    <artifactId>ad-hoc-parent</artifactId>
    <groupId>com.recondo.reporting</groupId>
    <version>0.0.1-SNAPSHOT</version>
</parent>
<modelVersion>4.0.0</modelVersion>

<artifactId>adhoc-data</artifactId>
<packaging>pom</packaging>
<modules>
    <module>adhoc-data-base-models</module>
</modules>

<properties>
    <java.version>1.8</java.version>
    <spring.boot.repackage.skip>true</spring.boot.repackage.skip>
</properties>

<dependencies>
    <dependency>
        <groupId>com.recondo.reporting</groupId>
        <artifactId>adhoc-data-base-models</artifactId>
        <version>0.0.1-SNAPSHOT</version>
    </dependency>
</dependencies>

<properties>
    <java.version>1.8</java.version>
    <spring.boot.repackage.skip>true</spring.boot.repackage.skip>
</properties>

在数据模块下,我想做的是创建子模块来组织代码。这是我创建的用于存储基本模型的模块的示例,每个报告都可以从该模型扩展:

    <parent>
    <artifactId>adhoc-data</artifactId>
    <groupId>com.recondo.reporting</groupId>
    <version>0.0.1-SNAPSHOT</version>
</parent>
<modelVersion>4.0.0</modelVersion>

<artifactId>adhoc-data-base-models</artifactId>

<properties>
    <java.version>1.8</java.version>
    <spring.boot.repackage.skip>true</spring.boot.repackage.skip>
</properties>

当我尝试构建该项目时,我得到一个错误,即adhoc-data-base-model和adhock-data之间存在周期性的依赖关系

  

反应堆中的项目包含一个循环引用:'Vertex {label ='com.recondo.reporting:adhoc-data:0.0.1-SNAPSHOT'}'和'Vertex {label ='com.recondo'之间的边。 report:adhoc-data-base-models:0.0.1-SNAPSHOT'}'引入循环com.recondo.reporting:adhoc-data-base-models:0.0.1-SNAPSHOT-> com.recondo。报表:adhoc-data:0.0.1-SNAPSHOT-> com.recondo.reporting:adhoc-data-base-models:0.0.1-SNAPSHOT-> [帮助1]

我读过possible solution

这很有意义,但是当我按照链接的建议删除了adhoc-data pom中的依赖项时,出现此错误:

  

[错误]无法在ad-hoc-web项目上执行目标:无法解析项目com.recondo.reporting:ad-hoc-web:jar:0.0.1-SNAPSHOT的依赖项:找不到工件com。 recondo.reporting:adhoc-data:jar:0.0.1-SNAPSHOT-> [帮助1]   也许有道理...我将数据模块打包为pom,因为这是将父模块与子模块打包的方式。...

我应该如何解决/构造多模块Maven项目以处理多个级别的依赖项?

1 个答案:

答案 0 :(得分:0)

我在您的图片中看到的第一个错误是您的adhoc-data模块,其中包含一个src文件夹。 adhoc-data模块是其子级的父级,其子级具有<packaging>pom</packaging>,这意味着该模块从未在其中进行编码,这意味着其中根本不会包含文件夹src

循环依赖是由于adhoc-data的pom定义了对以下内容的依赖:

<dependencies>
    <dependency>
        <groupId>com.recondo.reporting</groupId>
        <artifactId>adhoc-data-base-models</artifactId>
        <version>0.0.1-SNAPSHOT</version>
    </dependency>
</dependencies>

,也是给定模块的父级。这是完全错误的。第一步是从adhoc-data pom文件中删除上述依赖项。

此外,基于这些属性<spring.boot.repackage.skip>true</spring.boot.repackage.skip> ...,您的建筑中还有其他气味。