被误导的gradle使用本地maven仓库--gradle可以使用maven仓库中存在的依赖包但不能复用仓库。

一、前言  

    gradle配置使用本地仓库的过程并不顺利,度娘出来的文章大多讲的都不够详细、不够明白,对像我这样的小白没什么帮助,甚至有误导的作用。写这篇文章的目的主要是想说说自己经历和总结,希望能给别人一些少许的建议,同时也希望路过的大神们能够留下评论,给些建议。

    我的gradle及maven的相关目录如下:

        gradle目录:C:\dev\gradle-4.0

        maven目录:C:\dev\apache-maven-3.0.5

        maven仓库:C:\dev\apache-maven-3.0.5\repository

   因为gradle可以使用maven本地仓库,所以最开始的期望是配置使得gradle使用maven本地仓库,若依赖不存在就将依赖下载到本地maven仓库下,下载下来的依赖包和maven下载的依赖包结构是一样的。

二、过程

    最开始的时候搜索到文章大多说的只是将环境变量GRADLE_USER_HOME配置为maven本地仓库即可,因此我就将GRADLE_USER_HOME配置为:

C:\dev\apache-maven-3.0.5\repository

在项目的build.gradle的repositories中配置:

repositories {
    mavenLocal()//最新使用本地仓库
    maven { url 'http://maven.aliyun.com/nexus/content/repositories/central/'}//接着使用阿里云
    mavenCentral()//最后使用中心仓库
}

最后发现工程中并没有引用maven本地仓库的依赖,包括本地仓库已存在的依赖包也没有被引用,而是将所有的依赖下载到本地仓库目录下的caches\modules-2\files-2.1目录中:

好吧,看来这个方法,只好继续找。

接着有部分文章提到:

  mavenLocal()配置maven的本地仓库后,gradle默认会按以下顺序去查找本地的仓库:

      USER_HOME/.m2/settings.xml >> M2_HOME/conf/settings.xml >> USER_HOME/.m2/repository

于是在环境变量中将M2_HOME配置为:C:\dev\apache-maven-3.0.5。配置结束后刷新gradle,但是发现并没有什么效果。于是重启了idea再次刷新,这次发现有了效果,maven本地库里存在的依赖包被引了进来,但是不存在的依赖包被下载到本地仓库目录下的caches\modules-2\files-2.1目录中问题并未解决:

    走到了这一步,已经对以前的理解有了怀疑,gradle使用本地maven库并不是完全意义的使用,但还是不能肯定(被误导的太深了),最后又搜索了一些文章(如:Gradle 使用Maven的本地仓库(坑)gradle能否将下载的jar存储到maven本地仓库而不是缓存目录)得了一个结论:gradle使用本地maven仓库并非完成复用,若maven库中存在则用maven的,若不存在则用自己缓存的

三、结论

    当然,我这个结论并一定是最终的结论,但是一步一步的配置和验证这个结论符合我当前的环境(gradle版本配置等),同时也弄清楚了如下几个问题(符合我当前的环境): 

   1.gradle配置使用本地maven仓库这句话要说清楚,说明白,不然对小白造成很大的误解。

     使用本地maven仓库并不是将maven的仓库做为gradle自己仓库(称为缓存更贴切),而是使用maven仓库中存在的依赖包。当gradle工程需要的依赖包在maven仓库中存在时,gradle会引用maven的,若不存在gradle就会将依赖包下载到caches目录下,再引用(这个是有前提的,首先mavenLocal(),其次是必须要有个下载依赖的配置如mavenCentral()或maven{url '中心仓库地址'})。

  gradle下载到caches中的依赖,maven并一定能够复用。首先

   2.仅仅在环境变量中将GRADLE_USER_HOME配置为本地maven仓库目录就说gradle使用本地maven仓库是很有误导性的。

     在当前我的环境下,只配置GRADLE_USER_HOME=C:\dev\apache-maven-3.0.5\repository根本无法引用maven本地仓库存在的依赖,若要引用除了在项目中将mavenLocal()配置在第一位外还必须满足gradle能够查找到maven本地仓库的条件(后面再讲)。

   另外,还发现GRADLE_USER_HOME的作用只是指定gradle缓存(caches)依赖包的位置,即使不配置为maven本地仓库路径,只要满足以上条件依然会使用maven仓库中的依赖包。而且缓存在本地maven仓库目录下的依赖maven并不一定能够使用(我没测试过),因为二者的目录结构是不同的。

四、配置使用本地maven仓库中存在的依赖包

 1.工程中将mavenLocal()配置在第一位

repositories {
    mavenLocal()//最新使用本地仓库
    maven { url 'http://maven.aliyun.com/nexus/content/repositories/central/'}//接着使用阿里云
    mavenCentral()//最后使用中心仓库
}

2.配置gradle能够查找到maven本地仓库的条件

    由于gradle默认会按以下顺序去查找本地的仓库:USER_HOME/.m2/settings.xml >> M2_HOME/conf/settings.xml >> USER_HOME/.m2/repository(settings.xml文件中必须正确指定了本地maven仓库,USER_HOME为用户目录),可做如下配置方法:

    方法1:在用目录下创建.m2目录,并将settings.xml文件放入到目录中,然后重启idea刷新gradle

    方法2:不创建.m2目录,但配置环境变量M2_HOME=maven安装目录(我的为:M2_HOME=C:\dev\apache-maven-3.0.5),然后重启idea刷新gradle

   方法3:不创建.m2目录,也不配置环境变量M2_HOME,直接将USER_HOME/.m2/repository做本地maven仓库

五、结语

   好吧,其实我还是希望gradle能完全的复用本地maven仓库,就是不知道有没有这样的配置。如果有,请路过的大神留下评论,指导指导去怎么配置。

  • 33
    点赞
  • 37
    收藏
    觉得还不错? 一键收藏
  • 7
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值