多模块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