Maven 模块体系结构问题



我正在尝试使用Spring Boot和Maven作为依赖项管理器设计一个微服务平台。

这是我尝试实现的架构:

主文件夹

 - core/
     - pom.xml
     - dep-core/
        - pom.xml //core module as parent
        - src/main/...
 - cfm/
     - my-cfm-one/
        - pom.xml //core module as parent
        - src/main/...
     - my-cfm-two/
        - pom.xml //core module as parent
        - src/main/...
     - ...
 - pfm/
     - my-pfm-one/
        - pom.xml //core module as parent and import my-cfm-one as dependency
        - src/main/...
     - my-pfm-two/
        - pom.xml //core module as parent and import my-cfm-two as dependency
        - src/main/...
     - ...
 - ms/
     - my-ms-one/
        - pom.xml //core module as parent and import my-pfm-one and my-pfm-two as dependencies
        - src/main/...
     - ...

我的问题与 dep-core 模块有关。当我将模块核心设置为一个 cfm 的父级时,我无法访问定义为 dep-core 模块(导入到核心(父(模块中的类(

这是核心模块的pom(我省略了一些部分来缩短(

    ...
    <groupId>it.test</groupId>
    <artifactId>core</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <packaging>pom</packaging>
    <name>core</name>
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.1.2.RELEASE</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>
    <properties>
        ...
    </properties>

    <modules>
        <module>dep-core</module>
    </modules>
    <!-- I also tried ( with and without <module> tag )
        <dependencies>
            <dependency>
                <groupId>it.test</groupId>
                <artifactId>dep-core</artifactId>
                <version>0.0.1-SNAPSHOT</version>
            </dependency>
        </dependencies>
    -->
</project>

这是 dep 核心模块的 pom

    ...
    <groupId>it.test</groupId>
    <artifactId>dep-core</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <packaging>jar</packaging>
    <name>dep-core</name>
    <parent>
        <groupId>it.test</groupId>
        <artifactId>core</artifactId>
        <version>0.0.1-SNAPSHOT</version>
        <relativePath>../</relativePath>
    </parent>
    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter</artifactId>
        </dependency>
        ...
    </dependencies>
    <dependencyManagement>
        ...
    </dependencyManagement>
    <repositories>
        ...
    </repositories>
</project>

这是一个 cfm 模块的 pom

    <groupId>it.test</groupId>
    <artifactId>search-cfm</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <packaging>jar</packaging>
    <name>search-cfm</name>
    <parent>
        <groupId>it.test</groupId>
        <artifactId>core</artifactId>
        <version>0.0.1-SNAPSHOT</version>
        <relativePath/>
    </parent>
    <dependencies>
        <!--SPRING DEP-->
    </dependencies>
</project>

有人能给我正确的方法来设计我的架构并解决我的问题吗?

我还向 github 添加了示例项目以查看问题。

https://github.com/jayturchi/test-maven-architecture

为了

从父 POM 继承依赖项(依赖项将位于您的类路径中,以便您可以访问其类(,必须将依赖项声明为父 POM 的依赖项;因此,要将 dep-core 作为父 POM 中的依赖项,只需将其声明为男性并不能使其成为依赖项。您遇到了问题,因为您无法将深层核心声明为核心的直接依赖项,因为深层核心 POM 是核心 POM 的子级。这会导致一个循环依赖,阻止 maven 编译你的核心。要解决此问题,您需要一个从核心继承并以深层核心作为依赖项的中间 POM。让我们称这首诗为包装纸。现在,您可以将包装器声明为叶项目(cfm 和 pfm(的父 pom。

我发布了核心,包装器和cfm-one的正确POM。

核心网

  <groupId>it.test</groupId>
        <artifactId>my-cfm-one</artifactId>
        <version>0.0.1-SNAPSHOT</version>
        <packaging>jar</packaging>
        <name>my-cfm-one</name>
       <parent>
            <groupId>it.test</groupId>
            <artifactId>wrapper</artifactId>
            <version>1.0-SNAPSHOT</version>
            <relativePath>../</relativePath>
        </parent>
        <dependencies>
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-data-jpa</artifactId>
            </dependency>
            <dependency>
                <groupId>mysql</groupId>
                <artifactId>mysql-connector-java</artifactId>
                <scope>runtime</scope>
            </dependency>
        </dependencies>

包装纸

  <groupId>it.test</groupId>
    <artifactId>wrapper</artifactId>
    <version>1.0-SNAPSHOT</version>
    <packaging>pom</packaging>
    <parent>
        <groupId>it.test</groupId>
        <artifactId>core</artifactId>
        <version>0.0.1-SNAPSHOT</version>
        <relativePath>../</relativePath>
    </parent>
    <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    </properties>
    <dependencies>
            <dependency>
            <groupId>it.test</groupId>
            <artifactId>dep-core</artifactId>
            <version>0.0.1-SNAPSHOT</version>
        </dependency>
    </dependencies>

最后是CFM-One

    <artifactId>my-cfm-one</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <packaging>jar</packaging>
    <name>my-cfm-one</name>
    <parent>
    <groupId>it.test</groupId>
    <artifactId>wrapper</artifactId>
     <version>1.0-SNAPSHOT</version>
     <relativePath>../</relativePath>
    </parent>
    <dependencies>
     <dependency>
    <groupId>org.springframework.boot</groupId>
     <artifactId>spring-boot-starter-data-jpa</artifactId>
    </dependency>
<dependency>
<groupId>mysql</groupId>
 <artifactId>mysql-connector-java</artifactId>
<scope>runtime</scope>
</dependency>
</dependencies>

最新更新