多模块Maven项目
为了便于统一的版本维护和管理,经常会用到Maven的多模块模式。
本文以以下模块结构为例,对如何创建多模块Maven项目进行描述。
构建主工程
首先创建一个Maven项目作为主工程,类型无所谓,这里建议使用maven-archetype-quickstart
骨架,创建过程如下:
File-->New-->Project
-->Maven-->Create from archetype-->maven-archetype-quickstart-Next
-->GroupId={你的GroupId}-->AritifactId={你的ArtifactId}
-->Next-->Next-->Finish-->New Whindow
本示例中,我的主项目叫main-project
,GroupId
和AritifactId
的配置如下:
构建子模块
子模块项目创建于主工程之内,创建过程如下:
右键点击项目名称-->New-->Module
选中Spring Initializr-->Next
-->Group={主工程的GroupId}-->Aritifact={当前模块的ArtifactId}
、-->Next-->Next-->Finish
本示例中,子模块的名称为module-a
和module-b
,Group
和Aritifact
的配置如下:
通过同样的方式创建子模块module-b
。
优化结构
完成上述的主工程以及两个子模块创建之后,项目结构视图如下:
下面对这个多模块项目进行优化。
删除主工程多余目录
并不需要在主工程进行任何代码开发,所以删除其src
目录。
编辑主工程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>pers.hanchao
</groupId>
-
<artifactId>main-project
</artifactId>
-
<version>1.0-SNAPSHOT
</version>
-
<name>main-project
</name>
-
-
<!--子模块工厂配置-->
-
<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.2.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>
-
<spring-cloud.version>Dalston.SR1
</spring-cloud.version>
-
</properties>
-
-
<dependencies>
-
<!--Spring Boot 执行器组件-->
-
<dependency>
-
<groupId>org.springframework.boot
</groupId>
-
<artifactId>spring-boot-starter-actuator
</artifactId>
-
</dependency>
-
<!--Spring Cloud 服务注册组件-->
-
<dependency>
-
<groupId>org.springframework.cloud
</groupId>
-
<artifactId>spring-cloud-starter-eureka-server
</artifactId>
-
</dependency>
-
<!--Spring Boot Web组件-->
-
<dependency>
-
<groupId>org.springframework.boot
</groupId>
-
<artifactId>spring-boot-starter-web
</artifactId>
-
</dependency>
-
<!--Spring Boot 测试组件-->
-
<dependency>
-
<groupId>org.springframework.boot
</groupId>
-
<artifactId>spring-boot-starter-test
</artifactId>
-
<scope>test
</scope>
-
</dependency>
-
</dependencies>
-
-
<!--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>
-
-
<!--仓库配置-->
-
<repositories>
-
<repository>
-
<id>spring-snapshots
</id>
-
<name>Spring Snapshots
</name>
-
<url>https://repo.spring.io/snapshot
</url>
-
<snapshots>
-
<enabled>true
</enabled>
-
</snapshots>
-
</repository>
-
<repository>
-
<id>spring-milestones
</id>
-
<name>Spring Milestones
</name>
-
<url>https://repo.spring.io/milestone
</url>
-
<snapshots>
-
<enabled>false
</enabled>
-
</snapshots>
-
</repository>
-
</repositories>
-
</project>
在上述的pom.xml
文件中,主要做了以下几件事:
- 配置
Spring Boot
的版本 - 配置
Spring Cloud
的版本 - 配置微服务的一些基本组件,如
actuator
、eureka
、web
和test
。 - 配置编码方式
- 配置
java
版本 - 配置子模块
注意: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>
-
-
<groupId>pers.hanchao.mainproject
</groupId>
-
<artifactId>module-a
</artifactId>
-
<version>0.0.1-SNAPSHOT
</version>
-
<packaging>jar
</packaging>
-
-
<name>module-a
</name>
-
<description>Demo project for Spring Cloud Module A
</description>
-
-
<!--父工程的依赖-->
-
<parent>
-
<groupId>pers.hanchao
</groupId>
-
<artifactId>main-project
</artifactId>
-
<version>1.0-SNAPSHOT
</version>
-
<relativePath/>
<!-- lookup parent from repository -->
-
</parent>
-
-
<!--子模块的个性化依赖-->
-
<dependencies>
-
-
</dependencies>
-
-
</project>
从上面的配置可以得知,module-a
从主工程
中继承了一系列依赖关系,如actuator
、eureka
、web
和test
。
并且,module-a
还可以对自己模块特有的一些依赖进行配置。
运行测试
改写module-a
的启动类ModuleAApplication.java
,如下:
-
@RestController
-
@SpringBootApplication
-
public
class ModuleAApplication {
-
-
public static void main(String[] args) {
-
SpringApplication.run(ModuleAApplication.class, args);
-
}
-
-
@GetMapping(
"/hi")
-
public String hi(){
-
return
"Hello World!";
-
}
-
}
启动项目,在浏览器访问http://localhost:8080/hi,结果如图所示:
说明配置成功。
原文链接:https://blog.csdn.net/hanchao5272/article/details/80558780