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

Why is my gradle build not loading the most recent dependency?

在我们的大多数 gradle 项目中,我们有以下依赖项:

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

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

tl;dr

我们实际的 "most recent version" 是 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')

然后它工作 "correctly",检索正确的版本 1.7.0-SNAPSHOT


那么,为什么带有 + 版本通配符的依赖设置没有检索到最新版本?

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

手动刷新它们
--refresh-dependencies

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

您还可以将 changing 设置为 true,这样它就不会缓存快照

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