Gradle:基于Maven本地或远程存储库中的最新版本解决SNAPSHOT依赖关系



我想让gradle智能地为给定的可用依赖项使用最新的SNAPSHOT。

假设我有一个这样的构建文件:

mavenCentral()
//    if (gradle.startParameter.refreshDependencies == false) {
    mavenLocal()
//   }
    maven {
      url "my_local_repo.com
   }
}

依赖项如下所示:

compile (group: 'com.mystuff', name: 'my-library', version: '1.0.0-SNAPSHOT', changing: 'true')

这可能存在于Maven Local和Remote repo"my_Local_repo.com"中,我如何确保Gradle始终使用最新的快照进行编译?

我在这里阅读:

http://www.gradle.org/docs/current/userguide/artifact_dependencies_tutorial.html

特别是第8.5点:

一个项目可以有多个存储库。Gradle将寻找每个存储库中按指定顺序的依赖性,在包含所请求的模块的第一储存库处停止。

让我相信mavneLocal版本将永远是首选,然而我对的阅读

51.7此处:

http://www.gradle.org/docs/current/userguide/dependency_management.html#sec:repositories

给定所需的依赖关系,Gradle首先尝试解决模块。按顺序检查每个储存库,首先搜索模块描述符文件(POM或Ivy文件)指示该模块的存在。如果没有模块描述符如果找到,Gradle将搜索主模块的存在工件文件,指示该模块存在于存储库中。。。。一旦对每个存储库进行了模块检查,Gradle将选择要使用的"最佳"。这是使用以下方法完成的标准:

和51.2.4

或者,有时您请求的模块可能会随时间变化,即使是同一版本。此类更改模块的示例是一个Maven SNAPSHOT模块,它总是指向最新的工件出版。换句话说,标准Maven快照是一个模块可以说,它是一个"不断变化的模块"。

实质性地搅乱了这一点。它似乎说,所有回购都经过了检查,并做出了"最佳"选择(在这种情况下,可能是最新的)。

我想你忘记在第51.7节中强调的是:

当依赖关系由静态版本声明,并且在存储库中找到模块描述符文件时,无需继续搜索以后的存储库,并且该过程的其余部分会短路。

这与第8.5节所述内容一致。但是,对于更改模块(即快照),Gradle将检查每个repo以查找最新的工件。对于静态模块,它只需获取找到的第一个模块。

相关内容

最新更新