将多个springboot项目的pom.xml文件整合
0.0、前因
刚入公司敲代码时、发现一个项目中会包含多个子项目、每个子项目会代表一个功能模块、这属实是把我这个菜鸟惊叹到了。而这种分而治之的方式也引申出一个问题:各子项目的依赖如何统一管理?
我们知道、每个项目都会导入特定依赖、每个依赖又有若干版本、如果在这个项目使用这个版本、那个项目使用那个版本、是很容易造成混乱和版本冲突的。因此可将依赖分为父子关系。即一个父依赖管理若干个子依赖。
直接上代码:
父依赖:
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.6.11</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<groupId>com.hcgx-root</groupId>
<artifactId>hcgx-root</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>pom</packaging>
<modules>
<module>hcgx-service</module>
</modules>
<properties>
<java.version>1.8</java.version>
<mysql-connector.version>8.0.20</mysql-connector.version>
<maven-compiler-plugin.version>3.8.1</maven-compiler-plugin.version>
</properties>
<dependencyManagement>
<dependencies>
<!--Mysql数据库驱动-->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>${mysql-connector.version}</version>
</dependency>
</dependencies>
</dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>${maven-compiler-plugin.version}</version>
<configuration>
<source>1.8</source>
<target>1.8</target>
<encoding>UTF-8</encoding>
</configuration>
</plugin>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>
1、这玩意是啥?
首先:parent
意思可以理解为继承、整体意思是此xml
会继承spring-boot-starter-parent
文件中所有的依赖、相当于继承父依赖。而且这玩意是每一个springboot初始化时都存在的、它是springboot自动帮我们配置的。为的就是省略我们在创建sping项目时一些共有依赖
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.6.11</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
2、表示maven版本、必须填4.0.0才能使用多maven项目整合
<modelVersion>4.0.0</modelVersion>
3、此xml文件的名称、后面与子项目关联时是用到
<groupId>com.hcgx-root</groupId>
<artifactId>hcgx-root</artifactId>
<version>0.0.1-SNAPSHOT</version>
4、打包方式、默认会打包成 jar、因为父项目只是用来统筹子项目的依赖所以设置为pom,表示不动它。
每一个pom.xml文件都代表一个maven项目、需要结合此文件将项目打成jar包、而将程序打成jar包的目的是因为项目中有java代码且这些代码需要用到这些依赖、而父项目中已经将 src 目录删除了、不考虑其内的子项目、那么是没有理由需要被打成jar包(子项目自己有pom.xml文件把自己打成 jar 包)
<packaging>pom</packaging>
5、用来关联子项目名称、hcgx-service
就是子项目的名称(属实是双向奔赴)
<modules>
<module>hcgx-service</module>
</modules>
6、此标签内管理依赖版本、mysql-connector.version
是自定义的标签,使用时${mysql-connector.version}
来使用对应标签下的版本号(注:版本号一定是真实存在的不然使用自定义标签时会爆红)
<properties>
<java.version>1.8</java.version>
<mysql-connector.version>8.0.20</mysql-connector.version>
<maven-compiler-plugin.version>3.8.1</maven-compiler-plugin.version>
</properties>
7、dependencyManagement
标签表示模板、正常情况下直接使用 dependencies
(即最外层没有dependencyManagement
),表示导入此依赖、而dependencyManagement
标签只是作为一个依赖模板、 <version>${mysql-connector.version}</version>
存储这个依赖模板的版本号,后面子项目直接使用:
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
</dependency>
就可以导入依赖,且不需要指定依赖版本。
<dependencyManagement>
<dependencies>
<!--Mysql数据库驱动-->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>${mysql-connector.version}</version>
</dependency>
</dependencies>
</dependencyManagement>
8、dependencies
在父项目中导入的依赖会被所有子项目默认导入
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
子项目:
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>com.hcgx-root</groupId>
<artifactId>hcgx-root</artifactId>
<version>0.0.1-SNAPSHOT</version>
</parent>
<groupId>com.hcgx-service</groupId>
<artifactId>hcgx-service</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>hcgx-service</name>
<description>Demo project for Spring Boot</description>
<properties>
<java.version>1.8</java.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-jdbc</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>${maven-compiler-plugin.version}</version>
<configuration>
<source>1.8</source>
<target>1.8</target>
<encoding>UTF-8</encoding>
</configuration>
</plugin>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>
1、parent
标签里面是用来描述需要继承的对象、即使用此标签后我们会继承 groupId
为 com.hcgx-root
且 artifactId
为 hcgx-root
的父项目,这个内容其实在上面步骤 3 里。
<parent>
<groupId>com.hcgx-root</groupId>
<artifactId>hcgx-root</artifactId>
<version>0.0.1-SNAPSHOT</version>
</parent>
2、自己的名称等等
<groupId>com.hcgx-service</groupId>
<artifactId>hcgx-service</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>hcgx-service</name>
<description>Demo project for Spring Boot</description>
3、不用指定版本号,父项目指定了
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-jdbc</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
</dependency>
</dependencies>