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 - 获取依赖项的最新发布版本的主要内容,如果未能解决你的问题,请参考以下文章

Gradle - 获取依赖项的 URL

如何在 gradle 中获取依赖项的元数据?

Jenkins 和 gradle - 使用最新版本的 CI 依赖项构建项目,用于生产的特定版本

如何使用 spring boot 插件 2.0.x 从一个具有不同依赖项的 gradle 项目生成 2 个 jars

gradle 到 maven 的转换,在依赖项的依赖项的版本名称中解析通配符“+”?

在 Gradle 中,如何生成具有解析为实际使用版本的动态依赖项的 POM 文件?