springboot结合maven实现多模块打包

 更新时间:2023年04月21日 08:32:29   作者:IT人的天地  
本文主要介绍了springboot借助maven完成多模块打包,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧

我们平时在开发系统时,一般我们的系统工程会被分为多个模块,一个原因是方便协同开发,系统间解耦,另外一个很重要的原因是:别的系统需要依赖我们系统的部分功能,我们可能将这部分功能划分到一个模块里面,单独打包提供给对方。现在我将通过一个示例工程来演示如何借助maven完成springboot应用的多模块打包的操作。

要点:

1、工程存在多个模块,模块间有依赖关系

2、父工程维护工程的主版本号,子模块直接引用父工程定义的版本号的变量

3、借助flatten-maven-plugin插件完成子模块pom文件中引用的父工程变量的替换工作

1、 工程结构

test工程结构

test
--test-api
  --src
    --main
  --pom.xml
--test-core
  --src
    --main
      --java
      --resouce
    --test
--pom.xml

其中test-api模块为共用模块,test-core模块依赖test-api模块。后续也会有其他系统依赖test-api模块,因此需要将test-api模块发布到maven私服。

2、工程模块pom文件配置

2.1、父模块pom配置

<?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">
​
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.2.6.RELEASE</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>
​
    <modelVersion>4.0.0</modelVersion>
​
    <groupId>org.example</groupId>
    <artifactId>test</artifactId>
    <version>${revision}</version>
    <packaging>pom</packaging>
    <modules>
        <module>test-api</module>
        <module>test-core</module>
    </modules>
​
    <properties>
        <maven.compiler.source>8</maven.compiler.source>
        <maven.compiler.target>8</maven.compiler.target>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <revision>1.0.0</revision>
    </properties>
   <!--发布到远程仓库的配置-->
    <distributionManagement>
        <repository>
            <id>releases</id>
            <name>releases</name>
            <url>http://192.168.1.1/repository/releases/</url>
        </repository>
​
        <snapshotRepository>
            <id>snapshots</id>
            <url>http://192.168.1.1/repository/snapshots/</url>
        </snapshotRepository>
​
    </distributionManagement>
​
    <build>
        <plugins>
            <plugin>
                <groupId>org.codehaus.mojo</groupId>
                <artifactId>flatten-maven-plugin</artifactId>
                <version>1.4.1</version>
                <configuration>
                </configuration>
                <executions>
                    <!-- enable flattening -->
                    <execution>
                        <id>flatten</id>
                        <phase>process-resources</phase>
                        <goals>
                            <goal>flatten</goal>
                        </goals>
                    </execution>
                    <!-- ensure proper cleanup -->
                    <execution>
                        <id>flatten.clean</id>
                        <phase>clean</phase>
                        <goals>
                            <goal>clean</goal>
                        </goals>
                    </execution>
                </executions>
            </plugin>
        </plugins>
    </build>
​
​
</project>

父模块很重要的一个配置就是flatten-maven-plugin这个插件,用于打包时替换子模块中pom文件的引用的父工程的变量,比如revision变量。如果不添加此插件,虽然打包时不会报错,但是别的系统引用test-api.jar的时候,会出现类似Could not find artifact org.example:test:pom:${revision} in nexus-aliyun 的错误,主要原因就是子模块中引用的父工程的变量未被替换导致的

2.2、test-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>
        <groupId>org.example</groupId>
        <artifactId>test</artifactId>
        <version>${revision}</version>
        <relativePath>../pom.xml</relativePath>
    </parent>
​
    <artifactId>test-api</artifactId>
​
    <properties>
        <maven.compiler.source>8</maven.compiler.source>
        <maven.compiler.target>8</maven.compiler.target>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    </properties>
​
    <dependencies>
​
    </dependencies>
​
</project>

test-api模块的pom文件指定父工程时,version参数用变量表示,方便对版本号的维护。后续升级系统的版本号,只需要修改父工程中的revision变量即可。打包时,子模块pom文件中的revision会被替换成revision的真实值,此处打包后jar包里的pom文件的{revision}会被替换成revision的真实值,此处打包后jar包里的pom文件的revision会被替换成revision的真实值,此处打包后jar包里的pom文件的{revision}会被替换成1.0.0

2.3、test-core模块配置

<?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.example</groupId>
        <artifactId>test</artifactId>
        <version>${revision}</version>
        <relativePath>../pom.xml</relativePath>
    </parent>
​
    <artifactId>test-core</artifactId>
​
    <properties>
        <maven.compiler.source>8</maven.compiler.source>
        <maven.compiler.target>8</maven.compiler.target>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <!--跳过部署,执行deploy时不将本模块部署到仓库-->
        <maven.deploy.skip>true</maven.deploy.skip>
    </properties>
​
    <dependencies>
        <dependency>
            <groupId>org.example</groupId>
            <artifactId>test-api</artifactId>
            <version>${revision}</version>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
    </dependencies>
​
</project>

test-core模块直接依赖test-api模块,通过revison参数动态引用父工程中指定的版本号。将test−core打包后,test−core.jar包中的pom文件中的{revison}参数动态引用父工程中指定的版本号。将test-core打包后,test-core.jar包中的pom文件中的revison参数动态引用父工程中指定的版本号。将test−core打包后,test−core.jar包中的pom文件中的{revision}会被替换成revision参数的实际值1.0.0

3、工程打包

3.1、执行打包

(1)进入test工程根目录,比如我所在工程根目录路径是D:\ideaProject\test,

若执行下述命令,

mvn clean install

test-api模块和test-core模块都会被打包进本地仓库。

(2)如果执行下述命令,test-api模块会被部署到远程仓库,而test-core模块则不会被部署到远程仓库。

mvn clean deploy

(3)如果只想打包test-api模块到本地仓库,或者只想把test-api模块部署到远程仓库,可以进入test-api模块的主目录,比如D:\ideaProject\test\test-api,执行下述命令

#只安装到本地仓库

mvn clean install

#部署到远程仓库(该命令会先把包安装到本地仓库)

mvn clean deploy

3.2、打包效果

已test-api为例,打包后的test-api-1.00.jar文件中的pom.xml文件内容如下所示

<?xml version="1.0" encoding="UTF-8"?>
<project xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd" xmlns="http://maven.apache.org/POM/4.0.0"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
  <modelVersion>4.0.0</modelVersion>
  <groupId>org.example</groupId>
  <artifactId>test-api</artifactId>
  <version>1.0.0</version>
  <licenses>
    <license>
      <name>Apache License, Version 2.0</name>
      <url>https://www.apache.org/licenses/LICENSE-2.0</url>
    </license>
  </licenses>
</project>

可以发现,里面引入的父工程的变量已经被成功替换。

参考

1、flatten-maven-plugin官网

到此这篇关于springboot结合maven实现多模块打包的文章就介绍到这了,更多相关springboot maven多模块打包内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • java实现邮件发送详解

    java实现邮件发送详解

    这篇文章主要为大家详细介绍了java实现邮件发送示例,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2020-03-03
  • Spring的跨域的几个方案

    Spring的跨域的几个方案

    这篇文章主要介绍了Spring的跨域的几个方案,CrossOrigin、addCorsMappings、CorsFIlter等方案,具有一定的参考价值,需要的小伙伴可以参考一下,希望对你有所帮助
    2022-02-02
  • springboot之Validation参数校验详细解读

    springboot之Validation参数校验详细解读

    这篇文章主要介绍了springboot之Validation参数校验详细解读,本篇是关于springboot的参数校验知识,当然也适用其它java应用,读完本篇将学会基本的参数校验,自定义参数校验和分组参数校验,需要的朋友可以参考下
    2023-10-10
  • Java之理解Redis回收算法LRU案例讲解

    Java之理解Redis回收算法LRU案例讲解

    这篇文章主要介绍了Java之理解Redis回收算法LRU案例讲解,本篇文章通过简要的案例,讲解了该项技术的了解与使用,以下就是详细内容,需要的朋友可以参考下
    2021-08-08
  • 在 Spring Boot 中使用 Quartz 调度作业的示例详解

    在 Spring Boot 中使用 Quartz 调度作业的示例详解

    这篇文章主要介绍了在 Spring Boot 中使用 Quartz 调度作业的示例详解,在本文中,我们将看看如何使用Quartz框架来调度任务,Quartz支持在特定时间运行作业、重复作业执行、将作业存储在数据库中以及Spring集成,需要的朋友可以参考下
    2022-07-07
  • java类的定义与使用举例详解

    java类的定义与使用举例详解

    这篇文章主要给大家介绍了关于java类的定义与使用的相关资料,类的方法是用来定义类的行为,在方法中通过操作类的成员变量、编写业务逻辑、返回 结果等实现类的业务行为,需要的朋友可以参考下
    2023-11-11
  • Mybatis plus逻辑删除失败的BUG操作

    Mybatis plus逻辑删除失败的BUG操作

    这篇文章主要介绍了Mybatis plus逻辑删除失败的BUG操作,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-11-11
  • MyBatis获取插入记录的自增长字段值(ID)

    MyBatis获取插入记录的自增长字段值(ID)

    本文分步骤给大家介绍了MyBatis获取插入记录的自增长字段值的方法,在文中给大家提到了mybatis返回插入数据的自增长id,需要的朋友可以参考下
    2017-11-11
  • Flink实战之实现流式数据去重

    Flink实战之实现流式数据去重

    流式数据是一种源源不断产生的数据,本文探索了一种流式大数据的实时去重方法,不一定适用于所有场景,不过或许可以给面对相似问题的你一点点启发,
    2025-03-03
  • 基于JavaMail实现邮件发送

    基于JavaMail实现邮件发送

    这篇文章主要为大家详细介绍了基于JavaMail实现邮件发送功能,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2018-03-03

最新评论