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配置



    
        org.springframework.boot
        spring-boot-starter-parent
        2.2.6.RELEASE
         
    

    4.0.0

    org.example
    test
    ${revision}
    pom
    
        test-api
        test-core
    

    
        8
        8
        UTF-8
        1.0.0
    
   
    
        
            releases
            releases
            http://192.168.1.1/repository/releases/
        

        
            snapshots
            http://192.168.1.1/repository/snapshots/
        

    

    
        
            
                org.codehaus.mojo
                flatten-maven-plugin
                1.4.1
                
                
                
                    
                    
                        flatten
                        process-resources
                        
                            flatten
                        
                    
                    
                    
                        flatten.clean
                        clean
                        
                            clean
                        
                    
                
            
        
    



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

2.2、test-api模块配置


    4.0.0
    
        org.example
        test
        ${revision}
        ../pom.xml
    

    test-api

    
        8
        8
        UTF-8
    

    

    


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

2.3、test-core模块配置


    4.0.0
    
        org.example
        test
        ${revision}
        ../pom.xml
    

    test-core

    
        8
        8
        UTF-8
        
        true
    

    
        
            org.example
            test-api
            ${revision}
        
        
            org.springframework.boot
            spring-boot-starter-web
        
    


test-core模块直接依赖test-api模块,通过 r e v i s o n 参数动态引用父工程中指定的版本号。将 t e s t − c o r e 打包后, t e s t − c o r e . j a r 包中的 p o m 文件中的 {revison}参数动态引用父工程中指定的版本号。将test-core打包后,test-core.jar包中的pom文件中的 revison参数动态引用父工程中指定的版本号。将testcore打包后,testcore.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文件内容如下所示



  4.0.0
  org.example
  test-api
  1.0.0
  
    
      Apache License, Version 2.0
      https://www.apache.org/licenses/LICENSE-2.0
    
  

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

参考

1、flatten-maven-plugin官网

你可能感兴趣的:(springboot,maven)