为了方便维护管理项目,解决项目依赖及其版本问题;提高代码重复利用率。可以选择通过maven创建一个父级工程,然后由多个第二级工程来继承管理使用。
该文以CMMS项目为例,介绍该模式的一些简要的使用及配置,至于详细的标签功能及一些maven继承、依赖、聚合等详细内容该文不过多讲解,请自行查找。
(1)创建的父pom必须保证父工程的pom.xml文件中定义的打包packaging标签的类型是pom,一个java项目默认是jar类型,web项目默认是war类型,但是父工程必须是pom类型。
(2)我们想要使用一个工程,通过对这个工程命令执行,就能够同时执行其他多个工程的同一个命令,可以添加聚合标签
(3)管理依赖的版本(☆)
当项目中使用
redis.clients
jedis
3.1.0
(1)在子工程中使用
(2)依赖的版本由父工程指定
在依赖中只需要填写groupId artifactId,version直接继承自父工程
dependencies>
redis.clients
jedis
(3)在需要执行的springboot子项目pom文件中加入build插件。
org.springframework.boot
spring-boot-maven-plugin
1、为了管理引用的jar包的版本统一,强烈建议将依赖的
2、定义父项目版本时本地开发测试建议在版本号后面添加后缀SNAPSHOT说明是快照版本(如
3、子model中禁止不同的madel互相依赖,即依赖间不能形成闭环操作。
图中模块C依赖于模块B,模块B依赖于模块A,而模块A又依赖于模块C,这样就出现了相互依赖情况,如果运行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 可以实现单独打包子项目,而不是打包所有项目(浪费时间)。
将build中的命令改成clean install -pl curry-a -am -amd -Pdev -Dmaven.test.skip=true
这样就单独构建curry-a这个jar,相关依赖也会构建好,不用将依赖提前放入maven仓库。
该方式下maven的构建的jar存放的路径没有在根目录中,具体的路径可通过jenkins的控制输出台查看
所以在上传到其他的环境中时的路径应改成下面的