我试图设计使用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上。
为了继承依赖(依赖将在你的类路径,以便您可以访问它的类)从父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>