Gradle:根据Maven Local或Remote存储库中的最新版本解决SNAPSHOT依赖性

时间:2014-11-11 22:04:39

标签: android maven gradle

我希望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快照是一个模块   永远不会停滞不前,这是一个“改变模块”。

大致的Muddies。它似乎说所有的回购都被检查,并且最好的"选择(在这种情况下可能是最近的)。

1 个答案:

答案 0 :(得分:2)

我认为你忘了在第51.7节强调的一点是:

  

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

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