首页 文章

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

提问于
浏览
3

我想让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快照是一个永远不会停滞不前的模块,它是一个“改变模块” .

大致的泥泞 . 它似乎说所有的回购都被检查并且做出了“最佳”选择(在这种情况下可能是最新的) .

1 回答

  • 2

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

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

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

相关问题