gradle项目依赖公共模块
文章目录
前言
- 当有几个服务内部都依赖于一些共同代码时,通常我们会把这部分公共代码抽取剥离出来,然后打成jar包,供其他服务依赖
- 但这样有个很明显的缺陷就是每次一旦公共代码有更新,那么就必须重新打包jar,再更新到其他服务,其他服务再重新编译打包,在开发阶段这部分公共代码可能还不是很稳定,会随着需求不断增加新内容,那么这种打jar包的方式就显得非常麻烦
- 于是就在想,能不能不打成jar,而是每个服务都依赖这个公共代码工程,然后跟随服务一起打包编译,这样公共代码即使更新也不用手动去打jar包更新
- 经过试验,这样的办法的确是有的,本文就以gradle项目示例
步骤
-
假设目前有三个工程,一个为公共代码(commoncode),两个为业务工程(service-a,service-b),它们在本地目录为
services - commoncode - build.gradle - settings.gradle - service-a - build.gradle - settings.gradle - service-b - build.gradle - settings.gradle
-
其中service-a和service-b都依赖commoncode
-
修改service-a的build.gradle和settings.gradle,service-b类似做同样的修改
-
build.gradle修改如下:
//service-a的build.gradle文件增加 compile project(':commoncode') dependencies { ... compile project(':commoncode') }
-
settings.gradle修改如下:
rootProject.name = 'service-a' //includeFlat 'commoncode' //以下两行代码可以用此句代替,表示的是平级 include 'commoncode' project (':commoncode').projectDir=new File(settingsDir,'../commoncode')
-
经过以上步骤后,对service-a执行打包命令gradlew build,在打完的jar中的BOOT-INF/lib目录下可以看到已经包含了commoncode这个jar包
-
这样以后就能愉快修改commoncode了,不用每次都手动去更新各个服务的commoncode了
注意
- 以上方法只适合被依赖工程和依赖工程之间并无依赖冲突的情况下适用,如果两个工程之间都有相同的依赖,那么在打包时就会报错
- 针对这个问题,有人提出一种解决方案:https://blog.csdn.net/u010165638/article/details/89516025,但是这个方案只有在一个人做项目时可行,如果是多人协作,那么本地仓库的方式并不可行,还是得搭建一个私有仓库然后把代码放到私有仓库上
参考
idea gradle 依赖外部项目 - liuguodong1413的博客 - CSDN博客
https://blog.csdn.net/liuguodong1413/article/details/79149624