更多教程请访问简书:https://www.jianshu.com/c/4683518df962
多模块Maven项目
为了便于统一的版本维护和管理,经常会用到Maven的多模块模式。
本文以以下模块结构为例,对如何创建多模块Maven项目进行描述。
构建主工程
创建Maven项目:cloud_parent 作为父工程,创建过程如下;
打开Idear 点击 File-->New-->Project
- 选择Maven选项,点击Next。
- 填写GroupId 和AritifactId ,点击Next。
- GroupId :包名,AritifactId:项目名称。
- 选择Maven配置文件及仓库,点击Next。
- 项目名默认,点击Finish。
- 项目初始结构。
构建子模块
子模块项目创建于主工程之内,创建过程如下:
子模块名称:eureka_client
- 右键点击项目,选择new-->Model 。
- 填写包名及模块名
- 如下图选择默认,点击Next。
-
填写项目名称及项目路径
注意:项目的路径,存放在父工程内
- 父模块与子模块结构
- 编辑主工程pom.xml ,作为主工程,其
pom.xml
可以作为其他子模块工程的基准依赖,方便进行统一的版本管理。 - 将主工程
pom.xml
修改如下: - 添加子模块配置
- 添加SpringBoot配置
- 配置统一管理参数
- 添加项目依赖
- 添加SpringCloud版本序列配置
- 添加build构建
<?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.hf.parent</groupId>
<artifactId>cloud_parent</artifactId>
<version>1.0-SNAPSHOT</version>
<!--父工程一定要加-->
<name>cloud_parent</name>
<packaging>pom</packaging>
<description>Demo project for Spring Boot</description>
<!--子模块工厂配置-->
<modules>
<module>eureka_client</module>
<module>eureka_server</module>
</modules>
<!--Spring Boot配置-->
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.1.3.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 版本 -->
<java.version>1.8</java.version>
<!-- spring-cloud 版本 ,不同的Spring Boot版本对应不同的spring-cloud版本-->
<spring-cloud.version>Finchley.RELEASE</spring-cloud.version>
</properties>
<!--添加依赖,子项目无需再次添加-->
<dependencies>
<!--Spring Boot 执行器组件-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
<!--Spring Boot Web组件-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<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>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>
注意: spring boot2.0.0 以上对应 spring cloud(Finchley.RELEASE版本)
- 修改子模块的 pom.xml
- 原始eureka_client 子模块的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>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.1.3.RELEASE</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<groupId>com.hf.client</groupId>
<artifactId>eureka_client</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>eureka_client</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</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>
- 修改后eureka_client子模块 的pom.xml与主工程
pom.xml
的依赖关系
子模块主要修改一下几点:
- 删除 Spring Boot 父依赖
- 删除java版本
- 删除Spring Boot的依赖
- 删除 build 的maven构建
- 添加父依赖
<?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.hf.client</groupId>
<artifactId>eureka_client</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>eureka_client</name>
<description>Demo project for Spring Boot</description>
<!--父工程的依赖-->
<parent>
<groupId>com.hf.parent</groupId>
<artifactId>cloud_parent</artifactId>
<version>1.0-SNAPSHOT</version>
</parent>
<!--子模块的个性化依赖-->
<dependencies>
</dependencies>
</project>
- 删除父模块中的src 文件夹如图:
- 同理 依次创建: eureka_server:注册中心服务 模块, eureka_feign:服务消费者模块
运行测试
- 改写eureka_server的启动类 EurekaServerApplication.java 如下:
package com.hf.server.eureka_server;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
@SpringBootApplication
public class EurekaServerApplication {
public static void main(String[] args) {
SpringApplication.run(EurekaServerApplication.class, args);
}
@GetMapping("/hi")
public String hi(){
return "Hello World!";
}
}
- 启动EurekaServerApplication.java 。
- 访问 hi 方法
- 注 默认端口为:8080