Gradle - 获取依赖项的最新发布版本
Posted
技术标签:
【中文标题】Gradle - 获取依赖项的最新发布版本【英文标题】:Gradle - getting the latest release version of a dependency 【发布时间】:2012-05-09 08:52:40 【问题描述】:告诉Gradle
以下内容的最简单方法是什么:
检索“junit”依赖项并获取其最新的“发布”版本。
管理 Maven 和 Ivy 存储库对我来说有点陌生。我尝试了以下步骤,它们导致Could not resolve dependency ...
错误:
写compile "junit:junit:latest.release"
并将存储库设置为仅mavenCentral()
(但是,如果我说“junit:junit:4.10”,它会起作用)。
使用存储库设置写入compile "junit:junit:latest.release"
,方式如下:
ivy
// I also tried 'http://maven.org' and other possible variants.
url "http://repo1.maven.org"
layout "maven"
尝试使用 Spring Source Ivy 存储库:
ivy
artifactPattern "http://repository.springsource.com/ivy/libraries/release/[organisation]/[module]/[revision]/[artifact]-[revision].[ext]"
ivyPattern "http://repository.springsource.com/ivy/libraries/release/[organisation]/[module]/[revision]/[artifact]-[revision].[ext]"
也许我误解了什么。为什么获取最新版本的依赖项会如此艰巨?
【问题讨论】:
动态版本可以是最新可用版本的占位符,latest.integration
。 gradle documentation for dynamic versions
【参考方案1】:
Gradle 目前不支持 Maven 的 RELEASE
(很少使用和弃用),但它支持 Ivy 的 latest.release
。但是,一般建议是针对精确版本进行构建。否则,构建可能会变成彩票。
【讨论】:
Maven 也不支持 RELEASE。只有固定的版本号。 我已经仔细检查过了。 Maven 在版本 2 和 3 中都支持RELEASE
。
你是对的。我把插件版本弄错了,因为 Maven 3 它不再允许 RELEASE/LATEST 了。但是使用这样的版本标识符当然是不好的做法。
Maven 发布存储库中的工件是完成了所有可能的自动化(也可能是手动)测试的工件。该过程应包括 API 兼容性检查、回归测试等。那么为什么构建可以成为彩票?仅当您“发布”未经充分测试的工件时。
Grade 支持“latest.release”(但不支持“RELEASE”)。这对于确保您自己的内部库是最新的、经过验证的版本非常有用 - 我当然不会提倡将其用于外部/第 3 方库,原因与 Peter 上面建议的相同。【参考方案2】:
获取最新版本有时会非常有用 - 例如,如果您经常发布自己的依赖项。
你可以得到最新的版本
compile "junit:junit:+"
或者最好至少指定主要版本,例如
compile "junit:junit:4.+"
【讨论】:
只是为了记录:这确实应该是双引号!我一直在为我的大部分依赖声明使用单引号,发现code 'junit:junit:4.+'
不起作用
@azonli 似乎用单引号对我有用,至少对于本地依赖项。你得到什么错误?
不应该是“testCompile”而不是“compile”吗?因为发布中不需要工件
您并不总是需要可重现的构建。
@SimonForsberg ...没错,但是当您处于开发阶段时,您可能希望 (a) 遵循 bleeding-edge 或 (b) 确保为v4.+
为您的项目保持最新状态。 当你达到Alpha、Beta、-RC或-RELEASE阶段;我完全同意您需要将这些版本“钉”到杆子上。我使用properties' file to set version specifiers:
compile "junit:junit:$junitVer"`。【参考方案3】:
查看 Gradle-Versions-Plugin。它完全符合您的要求:https://github.com/ben-manes/gradle-versions-plugin
安装见github页面。基本上你需要将这两行添加到你的 build.gradle - 项目文件中:
apply plugin: 'com.github.ben-manes.versions'
buildscript
[...]
dependencies
classpath 'com.github.ben-manes:gradle-versions-plugin:0.8'
[...]
[...]
然后您可以通过在项目目录的终端中运行此命令来使用该插件:
./gradlew dependencyUpdates -Drevision=release
它会告诉你哪些依赖是过时的!
【讨论】:
如果您不想在每个项目中都包含该插件,也可以将其添加到初始化脚本中。详情请见this answer to another question。 如果依赖项在同一个 repo 中,并且您总是想要最新版本怎么办?【参考方案4】:最新的 Gradle 用户指南提到并解释了加号登录版本:
来自7.2. Declaring your dependencies:
dependencies compile group: 'org.hibernate', name: 'hibernate-core', version: '3.6.7.Final' testCompile group: 'junit', name: 'junit', version: '4.+'
...构建脚本还指出,任何 junit >= 4.0 都需要编译项目的测试。
来自23.7. How dependency resolution works:
如果将依赖项声明为动态版本(如 1.+),Gradle 会将其解析为存储库中最新的可用静态版本(如 1.2)。对于 Maven 存储库,这是使用 maven-metadata.xml 文件完成的,而对于 Ivy 存储库,这是通过目录列表完成的。
【讨论】:
重要提示:+ 不一定采用最新版本。请参阅我上面的评论。【参考方案5】:在 Android Studio 中:
如果您使用+
作为版本,并且想知道实际使用的是哪个版本,请在侧边栏中选择Project
,然后在External Libraries
下您会看到实际使用的版本号。
【讨论】:
您指的是特定的 IDE 吗? :-) Inego:是的,我将其添加到答案中;-)以上是关于Gradle - 获取依赖项的最新发布版本的主要内容,如果未能解决你的问题,请参考以下文章
Jenkins 和 gradle - 使用最新版本的 CI 依赖项构建项目,用于生产的特定版本
如何使用 spring boot 插件 2.0.x 从一个具有不同依赖项的 gradle 项目生成 2 个 jars