gradle缓存库转成maven

gradle缓存库转成maven一般有以下情况:

  • 在将用gradle管理的代码上库时,由于CI库上的项目编译需要本地化,且只支持maven的依赖缓存的文件结构。会出现gradle找不到包,无法编译的情况。
  • maven的依赖库中有许多第三方的依赖包,用gradle直接查找maven库,免去单独设置代理的繁琐。

maven和gradle的依赖包文件结构

首先看下gradle和maven的依赖包的存放结构,以guava-18.0.jar为例
maven:~/.m2/respository/com/google/guava/guava/18.0/guava-18.0.jar
gradke:~/.gradle/cache/modules-2/files-2.1/com.google.guava/guava/18.0/cce0823396aa693798f8882e64213b1772032b09/guava-18.0.jar
gradle的缓存目录多了一个随机值,并且目录层次与maven不同。在编译时,如果发现报错信息中显示查找jar包的路径没有cce0823396aa693798f8882e64213b1772032b09这个随机值,那么就需要将gradle的依赖jar包maven化。

依赖查找设置

在gradle项目的build.gradle文件中,需做如下修改
gradle缓存库转成maven_第1张图片
image.png

除此之外,还有
image.png

总而言之,就是将所有需要连接中心仓的设置全部本地化。如果设置后编译还是显示联网下载了,可以追一下build.gradle中apply的其他gradle文件,设置是一样的。

文件结构转换

这一步直接使用脚本转换,参考这里,但是在使用过程中发现这位老哥的脚本对于目录转换有一些BUG,自己修改了一下,放在了我的github上。
注:出于懒惰,我修改后没考虑边界条件,当files-2.1目录下的文件夹目录深度小于两层时会报错,正常使用的话files-2.1目录下只能有依赖的第三方库和这个脚本文件,直接执行这个脚本文件python transform.py生成的结果在当前目录的out目录下。
在files-2.1目录下使用cp -r out/* ~/.m2/repository/命令即可合并。

补充

本地与库上下载的jar包版本不同?

由于linux,gradle,maven,java等版本不同或者环境不同,会导致不同机器上对于gradle依赖包下载的版本不同,如自己的机器上本地下载了1.0版本,库上查找的是1.0.SNAPSHOT版本。这种情况是由于gradle没有指定版本,一般是一个半开半闭的区间,如[0.5,2.0)。出现这种问题直接指定版本即可。

代理设置?

maven直接在~/.m2/setting.xml文件中设置,将xxxxx依次替代为用户名,密码和ip

gradle缓存库转成maven_第2张图片
image.png

同时还要设置阿里云镜像
gradle缓存库转成maven_第3张图片
image.png

gradle在 ~/.gradle/目录下新建一个 gradle.properties文件,设置内容为
gradle缓存库转成maven_第4张图片
image.png

你可能感兴趣的:(gradle缓存库转成maven)