【问题标题】:multi-module maven spring boot project with n levels of dependencies具有n级依赖关系的多模块maven spring boot项目
【发布时间】:2019-05-08 19:03:13
【问题描述】:

我正在玩 maven 多模块 spring boot (v2.1) 项目,并认为我会非常聪明并将模块嵌套在其他模块中。这个项目的目的是运行不同的报告,在数据部分,我想按类型拆分报告以便于管理,同时共享一些功能 wike writers 和基类,因为它们将在每个报告中使用

下面是层次结构的屏幕截图,但基本上,我有一个父 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 和 adhoc-data 之间存在周期性依赖关系

reactor 中的项目包含一个循环引用:'Vertex{label='com.recondo.reporting:adhoc-data:0.0.1-SNAPSHOT'}' 和 'Vertex{label='com.recondo 之间的边。报告: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 项目来处理多个级别的依赖关系?

【问题讨论】:

    标签: java maven spring-boot multi-module


    【解决方案1】:

    我在您的图片中看到的第一个错误是您的 adhoc-data 模块,其中包含一个 src 文件夹。 adhoc-data 模块是它的子级的父级,它有&lt;packaging&gt;pom&lt;/packaging&gt;这意味着这样的模块从未在其中编码,这意味着其中根本不应该有文件夹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 文件中删除上述依赖。

    此外,基于这些属性&lt;spring.boot.repackage.skip&gt;true&lt;/spring.boot.repackage.skip&gt;...

    【讨论】:

    • 我已经删除了依赖项并且重新打包跳过...结果没有变化。如果你能解释它应该是什么样子而不是什么气味,那真的会对我有更大的帮助。我显然不知道我在这里做什么。这就是我发布这个问题的原因。我确实研究了其他资源广告,如果您知道有一个解释只是提出了单级依赖关系。
    • 请在 Github 等上创建一个示例项目,除了您应该尝试做一些研究和阅读文档之外,这真的会有所帮助......
    猜你喜欢
    • 2020-01-12
    • 2018-01-09
    • 2018-09-21
    • 2021-10-05
    • 2011-07-07
    • 2013-06-15
    • 1970-01-01
    • 2015-11-02
    • 1970-01-01
    相关资源
    最近更新 更多