IDEA的SpringBoot多模块构建
构建环境
- 编辑器:
IntelliJ IDEA 2018
-
JDK
版本:1.8
-
Spring Boot
版本:1.5.20.RELEASE
多模块Maven项目
为了便于统一的版本维护和管理,经常会用到Maven的多模块模式。
本文以以下模块结构为例,对如何创建多模块Maven项目进行描述。
构建主工程
首先创建一个Maven
项目作为 主工程,不使用任何骨架创建,创建过程如下:
File-->New-->Project
-->Maven-->Next
-->GroupId={你的GroupId}-->AritifactId={你的ArtifactId}-->Next
-->Next-->Finish-->New Whindow
本示例中,我的主项目叫springboot_main
,GroupId
和AritifactId
的配置如下:
构建子模块
子模块项目创建于主工程之内,创建过程如下:
右键点击项目名称-->New-->Module
选中Spring Initializr-->Next
-->Group={主工程的GroupId}-->Aritifact={当前模块的ArtifactId}
-->Next-->Next-->Finish
本示例中,子模块的名称为module-a
和module-b
,Group
和Aritifact
的配置如下:
通过同样的方式创建子模块module-b
。
优化结构
完成上述的主工程以及两个子模块创建之后,项目结构视图如下:
下面对这个多模块项目进行优化。
删除主工程多余目录
并不需要在主工程进行任何代码开发,所以删除其src
目录。
删除子模块无需文件
如果不使用mvnw
构建,可以删除子模块的.mvn
目录和mvnw
文件、mvnw.cmd
文件。
不使用HELP.md
文件,也可删除。
编辑主工程pom.xml
作为主工程,其pom.xml
可以作为其他子模块工程的基准依赖,方便进行统一的版本管理。
将主工程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.hayson</groupId>
<artifactId>springboot_main</artifactId>
<version>1.0-SNAPSHOT</version>
<!--父级项目的packaging设置为pom-->
<packaging>pom</packaging>
<!--主工程包含子模块工厂配置-->
<modules>
<module>module-a</module>
<module>module-b</module>
</modules>
<!--子模块的Spring Boot配置-->
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>1.5.20.RELEASE</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<!--配置参数(注释掉的在)-->
<properties>
<!-- 下面的三行,其实在前面<parent>的spring-boot-starter-parent中已默认配置有 -->
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
<java.version>1.8</java.version>
<!--例如(没使用Spring Cloud,这里不用配置):指定使用的spring-cloud版本-->
<spring-cloud.version>Dalston.SR1</spring-cloud.version>
</properties>
<!--子模块Spring Boot公共依赖-->
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<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>
<!--Spring Cloud 版本序列配置(没使用Spring Cloud,这里不用配置)-->
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-dependencies</artifactId>
<!--使用前面配置的版本-->
<version>${spring-cloud.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
</project>
注意:
Spring Boot
和Spring Cloud
有特定的对照关系,具体可参看:http://projects.spring.io/spring-cloud/
编辑子模块pom.xml
子模块pom.xml
可以引用主工程pom.xml
的依赖关系,所以也对其进行配置,其中module-a
的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>
<!--父工程的依赖-->
<parent>
<groupId>com.hayson</groupId>
<artifactId>springboot_main</artifactId>
<version>1.0-SNAPSHOT</version>
</parent>
<!--去除子模块的groudId-->
<!--<groupId>com.hayson</groupId>-->
<artifactId>module-a</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>module-a</name>
<description>Demo project for Spring Boot</description>
<!--子模块的packaging设置为jar-->
<packaging>jar</packaging>
<!--子模块的专用依赖-->
<dependencies>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>
删除core的启动类和配置文件
如果是Spring Boot单体应用分模块开发,则只需保留一个模块的启动类 和 配置文件, 其他模块的启动类都删除, 整个项目只需要一个启动类和一个配置文件 。
五、打包
打包前,确保只有启动类添加下面的插件,该插件用来打包项目:
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
在父模块pom.xml
的properties
的标签添加如下:
<properties>
<maven.test.skip>true</maven.test.skip>
</properties>
该设置表示打包时,跳过执行mvn test
,防止打包在test
时出错。
确保上面设置完后,在maven
窗口中,在父模块点击Lifecycle
下的package
执行打包:
控制台输出如下信息:
可以看到,项目打包在模块的target
目录下,在模块target
目录右键打开文件管理器查看: