精彩文章免费看

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文件中,需做如下修改
    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