我正在玩Maven多模块Spring Boot(v2.1)项目,并认为我将是超级聪明的人,并且将模块嵌套在其他模块中。该项目的目的是运行不同的报告,在数据部分中,我想按类型划分报告以实现可管理性,还希望共享一些功能,如编写器和基类,因为它们将用于每个报告中
下面是层次结构的屏幕截图,但是基本上,我有一个父pom使用(跳过依赖项和构建部分):
<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之间存在周期性的依赖关系
我读过possible solution的反应堆中的项目包含一个循环引用:'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]
这很有意义,但是当我按照链接的建议删除了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项目以处理多个级别的依赖项?
答案 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>
...,您的建筑中还有其他气味。