为什么我的gradle构建没有加载最新的依赖项?

时间:2016-07-01 18:08:00

标签: gradle artifactory gradlew

在我们的大部分gradle项目中,我们都有以下依赖关系:

compile('com.xxx.yyy.zzz:ch-commons:+')

根据我们对文档的理解,这应该从我们的maven存储库中检索最新版本的ch-commons

TL;博士

我们的实际"最新版本"是1.7.0-SNAPSHOT,但gradle 实际检索1.6.0-SNAPSHOT

整个故事

我们的存储库配置如下:

repositories {
    maven { url 'https://local-repo/artifactory/apps-release-local' }  // company application release builds
    maven { url 'https://local-repo/artifactory/apps-snapshot-local' } // company application snapshot builds
    maven { url 'https://local-repo/artifactory/repo1' }               // company lazy mirror of central repos
    mavenCentral()
    jcenter()
}

我已经确认除ch-commons之外的任何位置都没有apps-release-local个工件。在apps-release-local中我们有以下内容(sha1,md5和元数据文件省略):

Index of apps-snapshot-local/com/xxx/yyy/zzz/ch-commons

Name                          Last modified      Size
../
1.0.1-SNAPSHOT/               07-Apr-2016 16:09    -
1.0.2-SNAPSHOT/               08-Apr-2016 11:03    -
1.0.3-SNAPSHOT/               08-Apr-2016 14:32    -
1.0.4-SNAPSHOT/               13-Apr-2016 12:33    -
1.1.0-SNAPSHOT/               15-Apr-2016 12:37    -
1.2.0-SNAPSHOT/               17-May-2016 13:16    -
1.2.1-SNAPSHOT/               18-May-2016 14:28    -
1.3.0-SNAPSHOT/               14-Jun-2016 15:42    -
1.4.0-SNAPSHOT/               17-Jun-2016 11:57    -
1.5.0-SNAPSHOT/               17-Jun-2016 13:42    -
1.5.1-SNAPSHOT/               21-Jun-2016 16:16    -
1.6.0-SNAPSHOT/               22-Jun-2016 09:27    -
1.6.2-SNAPSHOT/               30-Jun-2016 22:02    -
1.6.3-SNAPSHOT/               01-Jul-2016 10:42    -
1.7.0-SNAPSHOT/               01-Jul-2016 13:34    -

查看1.7.0-SNAPSHOT目录,我们有以下内容(相同的内容已被删除):

Index of apps-snapshot-local/com/xxx/yyy/zzz/ch-commons/1.7.0-SNAPSHOT

Name                                                  Last modified      Size
../
ch-commons-1.7.0-20160701.183333-1-sources.jar        01-Jul-2016 13:34  14.54 KB
ch-commons-1.7.0-20160701.183333-1.jar                01-Jul-2016 13:34  22.19 KB
ch-commons-1.7.0-20160701.183333-1.pom                01-Jul-2016 13:34  2.21 KB

apps-snapshot-local/com/xxx/yyy/zzz/ch-commons/maven-metadata-2.xml的内容如下:

<?xml version="1.0" encoding="UTF-8"?>
<metadata>
  <groupId>com.xxx.yyy.zzz</groupId>
  <artifactId>ch-commons</artifactId>
  <version>1.6.3-20160701.154200-1</version>
  <versioning>
    <latest>1.7.0-SNAPSHOT</latest>
    <versions>
      <version>1.0.1-SNAPSHOT</version>
      <version>1.0.2-SNAPSHOT</version>
      <version>1.0.3-SNAPSHOT</version>
      <version>1.0.4-SNAPSHOT</version>
      <version>1.1.0-SNAPSHOT</version>
      <version>1.2.0-SNAPSHOT</version>
      <version>1.2.1-SNAPSHOT</version>
      <version>1.3.0-SNAPSHOT</version>
      <version>1.4.0-SNAPSHOT</version>
      <version>1.5.0-SNAPSHOT</version>
      <version>1.5.1-SNAPSHOT</version>
      <version>1.6.0-SNAPSHOT</version>
      <version>1.6.2-SNAPSHOT</version>
      <version>1.6.3-SNAPSHOT</version>
      <version>1.7.0-SNAPSHOT</version>
    </versions>
    <lastUpdated>20160701183429</lastUpdated>
  </versioning>
</metadata>

此外,如果我们更改依赖性声明以引用显式版本:

compile('com.xxx.yyy.zzz:ch-commons:1.7.0-SNAPSHOT')

然后正常工作&#34;正确地检索1.7.0-SNAPSHOT

那么,为什么不使用+版本通配符检索最新版本的依赖项设置呢?

2 个答案:

答案 0 :(得分:7)

默认情况下,gradle 缓存 SNAPSHOT依赖关系24小时 您可以使用

手动刷新它们
--refresh-dependencies

或者您可以按照指南配置缓存持续时间: https://docs.gradle.org/current/userguide/dependency_management.html#sub:cache_refresh

答案 1 :(得分:1)

您也可以将更改设置为 true,这样它就不会缓存快照

实现组:'com.xxx.yyy.zzz',名称:'ch-commons',版本:'1.7.0-SNAPSHOT',更改:true