前言
maven 作为项目管理的基本工具,其基本管理思路就是“约定大于配置”,但在实际配置过程中,却没有很好的配置原则能清晰的描述依赖结构。以下为我比较推荐的一种配置方式,适用于maven管理的多模块项目的配置结构。
介绍
本文提供了一套较为清晰的mvn多模块依赖版本管理机制
调用关系
依赖关系
模块定义
定义 mvn parent(父项目)
<?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.zackdemo</groupId>
<artifactId>zack-demo-001</artifactId>
<version>${revision}</version>
<packaging>pom</packaging>
<name>zack-demo-001</name>
<description>mvn多模块示例项目(父项目)</description>
<!-- Spring Boot Starter Parent -->
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.0.4.RELEASE</version>
</parent>
<!-- 项目子模块 -->
<modules>
<module>zack-demo-admin</module>
<module>zack-demo-api</module>
<module>zack-demo-service</module>
<module>zack-demo-common</module>
</modules>
<properties>
<java.version>1.8</java.version>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<!-- +++++++++++++++++ 本项目统一版本声明,版本声明不允许直接定义在子模块中 +++++++++++++++++ -->
<!-- 本项目版本声明 -->
<revision>1.0-SNAPSHOT</revision>
<!-- 本项目mvn插件版本声明 -->
<maven.compiler.source>1.8</maven.compiler.source>
<maven.compiler.target>1.8</maven.compiler.target>
<maven-source-plugin.version>3.0.0</maven-source-plugin.version>
<maven-deploy-plugin.version>2.8.2</maven-deploy-plugin.version>
<spring-boot-maven-plugin.version>2.0.4.RELEASE</spring-boot-maven-plugin.version>
<flatten-maven-plugin.version>1.1.0</flatten-maven-plugin.version>
<!-- 本项目基础依赖版本声明 -->
<springboot.version>2.0.4.RELEASE</springboot.version>
<springcloud.version>Finchley.SR2</springcloud.version>
<springcloud-starter.version>2.0.2.RELEASE</springcloud-starter.version>
<fastjson.version>1.2.30</fastjson.version>
<google.guava.version>23.0</google.guava.version>
<hutool-all.version>5.0.6</hutool-all.version>
<junit.jupiter.version>5.8.0-M1</junit.jupiter.version>
<!-- 本项目依赖的其它项目版本声明 -->
<other-service-api.version>1.0.0-SNAPSHOT</other-service-api.version>
</properties>
<dependencyManagement>
<dependencies>
<!-- ++++++++++++++ Spring Boot ++++++++++++++ -->
<!-- ++++++++++++++ End Of Spring Boot ++++++++++++++ -->
<!-- ++++++++++++++ Spring Cloud ++++++++++++++ -->
<!-- ++++++++++++++ End Of Spring Cloud ++++++++++++++ -->
<!-- ++++++++++++++ Commons ++++++++++++++ -->
<!-- ++++++++++++++ End Of Commons ++++++++++++++ -->
<!-- ++++++++++++++ Custom Component ++++++++++++++ -->
<!-- ++++++++++++++ End Of Custom Component ++++++++++++++ -->
</dependencies>
</dependencyManagement>
<!-- 指定系统模块统一依赖 -->
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.junit.jupiter</groupId>
<artifactId>junit-jupiter</artifactId>
<version>${junit.jupiter.version}</version>
<scope>compile</scope>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
</dependency>
</dependencies>
<build>
<pluginManagement>
<plugins>
<!-- mvn 源码打包插件 -->
<!-- mvn 发布私服插件 -->
<!-- Spring Boot 工程打包插件 -->
<!-- 生成压缩版的pom.xml,在install和deploy阶段使用压缩后的pom.xml文件 -->
</plugins>
</pluginManagement>
<!-- 指定系统模块插件统一依赖 -->
<plugins>
<!-- mvn 源码打包插件 -->
<!-- 使用压缩版的pom.xml -->
</plugins>
</build>
<!-- 指定mvn私服 -->
<distributionManagement>
</distributionManagement>
</project>
定义 mvn module-后台服务
<?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>
<artifactId>zack-demo-001</artifactId>
<groupId>com.zackdemo</groupId>
<version>${revision}</version>
</parent>
<artifactId>zack-demo-admin</artifactId>
<packaging>jar</packaging>
<name>zack-demo-admin</name>
<description>mvn多模块示例项目-后台服务</description>
<dependencies>
<!-- zack-demo-service -->
<dependency>
<groupId>com.zackdemo</groupId>
<artifactId>zack-demo-service</artifactId>
<version>${project.version}</version>
</dependency>
</dependencies>
<build>
<finalName>zack-demo-admin</finalName>
<resources>
<resource>
<directory>src/main/resources/</directory>
</resource>
</resources>
<plugins>
<!-- Spring Boot 工程打包插件 -->
<!--本模块忽略deploy-->
</plugins>
</build>
</project>
定义mvn module-api模块
<?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>
<artifactId>zack-demo-001</artifactId>
<groupId>com.zackdemo</groupId>
<version>${revision}</version>
</parent>
<artifactId>zack-demo-api</artifactId>
<packaging>jar</packaging>
<name>zack-demo-api</name>
<description>mvn多模块示例项目-api模块</description>
<dependencies>
<!-- zack-demo-common -->
<dependency>
<groupId>com.zackdemo</groupId>
<artifactId>zack-demo-common</artifactId>
<version>${project.version}</version>
</dependency>
</dependencies>
<build>
<plugins>
<!-- mvn 发布私服插件 -->
</plugins>
</build>
</project>
定义 mvn module-核心服务
<?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>
<artifactId>zack-demo-001</artifactId>
<groupId>com.zackdemo</groupId>
<version>${revision}</version>
</parent>
<artifactId>zack-demo-service</artifactId>
<packaging>jar</packaging>
<name>zack-demo-service</name>
<description>mvn多模块示例项目-核心服务</description>
<dependencies>
<!-- zack-demo-api -->
<dependency>
<groupId>com.zackdemo</groupId>
<artifactId>zack-demo-api</artifactId>
<version>${project.version}</version>
</dependency>
<!-- ++++++++++++++ Spring Boot ++++++++++++++ -->
<!-- ++++++++++++++ End Of Spring Boot ++++++++++++++ -->
<!-- ++++++++++++++ Spring Cloud ++++++++++++++ -->
<!-- ++++++++++++++ End Of Spring Cloud ++++++++++++++ -->
</dependencies>
<build>
<finalName>zack-demo-service</finalName>
<resources>
<resource>
<directory>src/main/java</directory>
<includes>
<include>**/*.xml</include>
</includes>
</resource>
<resource>
<directory>src/main/resources/</directory>
</resource>
</resources>
<plugins>
<!--本模块忽略deploy-->
</plugins>
</build>
</project>
定义 mvn module-公共模块
<?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>
<artifactId>zack-demo-001</artifactId>
<groupId>com.zackdemo</groupId>
<version>${revision}</version>
</parent>
<artifactId>zack-demo-common</artifactId>
<packaging>jar</packaging>
<name>zack-demo-common</name>
<description>mvn多模块示例项目-公共模块</description>
<dependencies>
<!-- ++++++++++++++ Commons ++++++++++++++ -->
<!-- ++++++++++++++ End Of Commons ++++++++++++++ -->
</dependencies>
<build>
<plugins>
<!-- mvn 发布私服插件 -->
</plugins>
</build>
</project>
示例工程地址