Maven多模块使用及jenkins构建

一、背景

为了方便维护管理项目,解决项目依赖及其版本问题;提高代码重复利用率。可以选择通过maven创建一个父级工程,然后由多个第二级工程来继承管理使用。

二、主要配置

该文以CMMS项目为例,介绍该模式的一些简要的使用及配置,至于详细的标签功能及一些maven继承、依赖、聚合等详细内容该文不过多讲解,请自行查找。

1、父pom

 (1)创建的父pom必须保证父工程的pom.xml文件中定义的打包packaging标签的类型是pom,一个java项目默认是jar类型,web项目默认是war类型,但是父工程必须是pom类型。

Maven多模块使用及jenkins构建_第1张图片

 

(2)我们想要使用一个工程,通过对这个工程命令执行,就能够同时执行其他多个工程的同一个命令,可以添加聚合标签实现该功能。

           Maven多模块使用及jenkins构建_第2张图片

 

(3)管理依赖的版本(☆)

当项目中使用标签管理大量依赖时,并不会在项目中直接使用依赖.而是当你使用到其中的某些依赖时,不需要添加版本号。这个标签用的最多的还是在父工程中实现依赖的版本管理,从而子工程不会强制使用这些依赖,只会继承依赖管理中的版本号,这样可以留给子工程选择的空间

  • 父工程:在依赖管理中添加spring-beans依赖

    
       
           redis.clients
           jedis
           3.1.0
       
    

 

2、子Pom

(1)在子工程中使用标签,定义groupId artifactId version指向父工程.这样父工程的一些资源标签就可以被子工程使用了

Maven多模块使用及jenkins构建_第3张图片

 

(2)依赖的版本由父工程指定

  • 子工程

在依赖中只需要填写groupId artifactId,version直接继承自父工程

dependencies>
    
        redis.clients
        jedis
    

(3)在需要执行的springboot子项目pom文件中加入build插件。


    
       
              org.springframework.boot
              spring-boot-maven-plugin
       
     

三、规范

1、为了管理引用的jar包的版本统一,强烈建议将依赖的放入父项目的中,子项目只需要需要填写groupId artifactId,而版本标签version直接继承自父工程;子项目最好不要出现版本号。

2、定义父项目版本时本地开发测试建议在版本号后面添加后缀SNAPSHOT说明是快照版本(如1.0-SNAPSHOT)。若是生产发行版建议修改为RELEASE(如1.0-SNAPSHOT)。

3子model中禁止不同的madel互相依赖,即依赖间不能形成闭环操作。

Maven多模块使用及jenkins构建_第4张图片 

CB,模BA,而AC,这,如mvn compile出现异常 :The projects in the reactor contain a cyclic reference。

可以通过重构解决上面问题

(1)第一个办法是平移,比如A和B互相依赖,那么可以将B依赖A的那部分代码,移动到工程B中,这样一来,B就不需要继续依赖A,只要A依赖B就可以了,从而消除循环依赖
(2)第二个办法是下移,比如A和B互相依赖,同时它们都依赖C,那么可以将B和A相互依赖的那部分代码,移动到工程C里,这样一来,A和B相互之间都不依赖,只继续依赖C,也可以消除循环依赖
这两种重构方式都是可行的,具体采用哪种方式要根据实际情况来判断。

四、Jenkins

 jenkins 可以实现单独打包子项目,而不是打包所有项目(浪费时间)。

1、Build

将build中的命令改成clean install -pl curry-a -am -amd -Pdev -Dmaven.test.skip=true

这样就单独构建curry-a这个jar,相关依赖也会构建好,不用将依赖提前放入maven仓库。

Maven多模块使用及jenkins构建_第5张图片

 

2、构建后操作

该方式下maven的构建的jar存放的路径没有在根目录中,具体的路径可通过jenkins的控制输出台查看

Maven多模块使用及jenkins构建_第6张图片 

所以在上传到其他的环境中时的路径应改成下面的

Maven多模块使用及jenkins构建_第7张图片

 

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