Maven的模块结构问题

问题描述 投票:0回答:1

我试图设计使用Spring引导和Maven作为依赖管理一个微服务平台。

这是我想要实现的体系结构:

MainFolder

 - 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核心模块。当我设置模块核心作为一个CFM的父母,我无法访问到限定为DEP-核心模块的类(即导入到芯(父)模块)

这是核心模块的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

maven architecture dependencies pom.xml parent
1个回答
0
投票

为了继承依赖(依赖将在你的类路径,以便您可以访问它的类)从父POM的依赖关系必须被声明为父POM的依赖;所以有你的DEP核心在父POM的依赖,只是声明它作为一个男性不使它成为依赖。你有一个问题,因为你不能声明深核心以来深核POM核心的直接依赖关系是核心POM的孩子。这导致循环依赖防止行家从编译你的核心。为了解决这个问题,您需要一个中间POM核心和深核作为一个依赖继承。让我们称这首诗包装。现在,你可以声明包装作为父POM你的叶子项目(CFM和PFM)。

我张贴校正POM核心,包装和CFM-之一。

core.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>

wrapper.pom

  <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-一个

    <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>
© www.soinside.com 2019 - 2024. All rights reserved.