IDEA 创建SpringBoot多级MAVEN父子项目
一、环境准备
开发环境准备(博主这里使用JDK8、MAVEN3.5.3、IDEA2017x64)。
1、JDK安装配置
参考我的另外一篇博客:
链接: JDK安装配置-swotXu.
2、MAVEN安装配置
参考我的另外一篇博客:
链接: MAVEN安装配置-swotXu.
二、项目搭建
本次演示,博主创建三层MAVEN父子项目。
一级:mavne项目 swotxu
二级:maven项目 common/webbase
三级:springboot项目 concurrency
/webdemo
若创建两级父子项目,则父项目为maven项目,子项目为springboot项目
1、创建顶级Maven项目
FIle -> new -> project
,选Maven,创建maven项目。
这里注意Projiect location
,指向当前项目存放路径
创建完成以后,删除 src
目录
修改pom.xml
文件,添加如下配置
- 将当前项目定义为
pom
项目
<packaging>pom</packaging>
<name>swotxu</name>
- 注册子项目,后面创建的二级子项目在父项目中注册
<modules>
<module>swotxu-common</module>
<!-- <module>swotxu-webbase</module>-->
</modules>
- 依赖管理 – 有两种依赖管理方式
使用<dependencyManagement>
进行依赖管理
父项目相当于一个依赖发布工厂,父项目统一管理依赖版本。
子项目需要的依赖,需在子项目中手动指定引入,无需指定依赖版本,无法继承父项目依赖直接使用
一级父项目使用此方式
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
<version>${springboot.version}</version>
</dependency>
</dependencies>
</dependencyManagement>
使用<dependencies>
进行依赖管理
子项目无需手动指定依赖引入,会自动继承父依赖直接使用。
二级子项目使用此方式
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
<version>${springboot.version}</version>
</dependency>
</dependencies>
附: 一级项目完整pom.xml
配置
<?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 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.swotxu</groupId>
<artifactId>swotxu</artifactId>
<version>1.0-SNAPSHOT</version>
<!-- 将当前项目定义为pom -->
<packaging>pom</packaging>
<name>swotxu</name>
<!--指定当前项目继承spring-boot-->
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.2.1.RELEASE</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<!--项目中依赖版本统一管理-->
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
<java.version>1.8</java.version>
<springboot.version>2.2.1.RELEASE</springboot.version>
<mybatis.version>2.1.1</mybatis.version>
<lombok.version>1.18.10</lombok.version>
<junit.version>4.12</junit.version>
</properties>
<!--注册子项目 后面创建二级子项目后,需在父项目中注册-->
<modules>
<!--<module>swotxu-common</module>-->
<!--<module>swotxu-webbase</module>-->
</modules>
<!--
父项目引用依赖
注:父项目依赖引用有两种方式
1、使用此方式进行依赖管理时,父项目相当于一个依赖发布工厂。
子项目需要哪些依赖,需要手动指定引入,无法继承父项目依赖直接使用
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
<version>${springboot.version}</version>
</dependency>
</dependencies>
</dependencyManagement>
2、使用此方式经行依赖管理时,子项目无需手动指定依赖引入,
会自动继承父依赖直接使用。
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
<version>${springboot.version}</version>
</dependency>
</dependencies>
-->
<dependencyManagement>
<dependencies>
<!-- web组件 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
<version>${springboot.version}</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<version>${springboot.version}</version>
<scope>test</scope>
<exclusions>
<exclusion>
<groupId>org.junit.vintage</groupId>
<artifactId>junit-vintage-engine</artifactId>
</exclusion>
</exclusions>
</dependency>
</dependencies>
</dependencyManagement>
<build>
<plugins>
<!-- 资源文件拷贝插件 -->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-resources-plugin</artifactId>
<configuration>
<encoding>UTF-8</encoding>
</configuration>
</plugin>
<!-- java编译插件 -->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<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>
2、创建二级Maven子项目
FIle -> new -> Module
,选Maven,创建maven项目。
由于继承父maven项目,此时GroupId
和Version
自动引用父项目的
注意子项目路径
由于博主这里演示三级父子项目继承,创建完成以后,同样删除 src
目录,项目结构如下:
修改一级项目swotxu/pom.xml
文件,添加如下配置,将当前二级子项目注册到父项目
<modules>
<module>swotxu-common</module>
</modules>
修改二级项目common/pom.xml
文件,添加如下配置
- 将当前项目定义为
pom
项目
<packaging>pom</packaging>
<name>common</name>
- 注册子项目,后面创建的三级子项目在父项目中注册
<modules>
<module>swotxu-concurrency</module>
</modules>
- 依赖管理 – 此次使用第二种依赖管理方式
<dependencies>
<!-- web组件 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
</dependencies>
附: 二级子项目完整pom.xml
配置
<?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 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<parent>
<artifactId>swotxu</artifactId>
<groupId>com.swotxu</groupId>
<version>1.0-SNAPSHOT</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<artifactId>common</artifactId>
<packaging>pom</packaging>
<name>common</name>
<description>Common template</description>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
<java.version>1.8</java.version>
</properties>
<modules>
<!--<module>swotxu-concurrency</module>-->
<!--<module>swotxu-algorithm</module>-->
</modules>
<dependencies>
<!-- web组件 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
</dependencies>
<!--
将这段放开,并指定入口,则打jar包,
如果注释这一段,并在子项目web中将
<packaging>jar</packaging>改成war,则打成war包
-->
<build>
<plugins>
<plugin>
<!-- The plugin rewrites your manifest -->
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<executions>
<execution>
<goals>
<!--可以把依赖的包都打包到生成的Jar包中-->
<goal>repackage</goal>
</goals>
<!--可以生成不含依赖包的不可执行Jar包-->
<!-- configuration>
<classifier>exec</classifier>
</configuration> -->
</execution>
</executions>
</plugin>
</plugins>
</build>
</project>
3、创建三级Springboot子项目
FIle -> new -> Module
,选String Initializr,创建springboot项目。
这里注意Content root
和Module file location
,包含三个层级关系
创建完成以后,项目结构如下:
修改二级项目common/pom.xml
文件,添加如下配置,将当前三级子项目注册到父项目
<modules>
<module>swotxu-concurrency</module>
</modules>
修改三级项目concurrency/pom.xml
文件,添加如下配置
- 指定当前项目的父项目为
common
父项目
<parent>
<groupId>com.swotxu</groupId>
<artifactId>common</artifactId>
<version>1.0-SNAPSHOT</version>
<relativePath>../pom.xml</relativePath>
</parent>
- 将当前项目定义为
jar
项目
<packaging>jar</packaging>
<name>conurrency</name>
- 依赖管理 – 直接继承父项目依赖,子项目无需手动引用依赖
<dependencies>
</dependencies>
附: 三级子项目完整pom.xml
配置
<?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.swotxu</groupId>
<artifactId>common</artifactId>
<version>1.0-SNAPSHOT</version>
<relativePath>../pom.xml</relativePath>
</parent>
<groupId>com.swotxu</groupId>
<artifactId>concurrency</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>jar</packaging>
<name>conurrency</name>
<description>Demo project for Spring Boot</description>
<properties>
<java.version>1.8</java.version>
</properties>
<dependencies>
</dependencies>
<!--让多模块化拆分之后还能打成完整的可执行jar包-->
<build>
<finalName>concurrency-demo</finalName>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<configuration>
<mainClass>com.swotxu.concurrency.ConcurrencyApplication</mainClass>
</configuration>
</plugin>
</plugins>
</build>
</project>
以上,三级父子项目基本搭建完成!
这里贴另一个项目的结构图供参考:
至此,多级Maven父子项目就创建完成了。
大家如果有什么疑问,欢迎评论留言!别忘了收藏关注~