Gradle-获取依赖项的最新发行版


93

告诉Gradle以下内容的最简单方法是:

检索“ junit”依赖项并获取其最新的“发行版”版本。

管理Maven和Ivy存储库对我来说是新的。我尝试了以下步骤,但它们导致Could not resolve dependency ...错误:

  • compile "junit:junit:latest.release"使用仅设置为(但是,如果我说“ junit:junit:4.10”)的存储库写mavenCentral()

  • 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.integrationgradle动态版本文档
Bhavik

Answers:


48

Gradle当前不支持Maven的RELEASE(很少使用和不推荐使用),但是它支持Ivy的latest.release。但是,一般建议是针对确切版本进行构建。否则,构建可能会变成彩票。


Maven也不支持RELEASE。仅固定版本号。
khmarbaise 2012年

10
我已经仔细检查过了。Maven的不支持RELEASE,无论是在第2版和3
彼得Niederwieser

你是对的。我误认为插件版本会导致Maven 3不再允许RELEASE / LATEST。但是使用这样的版本标识符当然是不好的做法。
khmarbaise 2012年

Maven版本存储库中的工件是已经完成所有可能的自动化(也许是手动)测试的工件。该过程应包括API兼容性检查,回归测试等。为什么然后该建筑可以变成彩票?仅当您“释放”未经充分测试的工件时。
RCross 2014年

2
等级支持“最新发行”(但不支持“发行”)。这对于确保您自己的内部库为最新的,经过验证的版本非常有用-我当然不会提倡将其用于外部/第三方库,原因与Peter上面提到的相同。
RCross,2015年

257

有时获得最新版本可能非常有用-例如,如果您经常发布自己的依赖关系。

您可以获取最新版本,例如

compile "junit:junit:+"

或至少指定主要版本,例如

compile "junit:junit:4.+"

27
仅作记录:确实应该是双引号!我一直在对大多数依赖项声明使用单引号,但发现那code 'junit:junit:4.+'行不通
azonli

1
@azonli似乎对我有用单引号,至少对于本地依赖项有效。你得到什么错误?
David Moles 2014年

3
应该不是“ testCompile”而不是“ compile”吗?因为在发行版中不需要工件
MartinDürrmeier2015年

6
您并不总是需要可复制的构建。
Lakatos Gyula

2
@SimonForsberg ......真,然而,当你正在开发可能要(一)遵循出血边缘或(b)确保错误修正,乞伏4.+都保持最新为您的项目。 您到达Alpha,Beta,-RC或-RELEASE阶段时;我完全同意您需要将这些版本“ 钉牢 ”在极点。我使用了一个properties' file to set version specifiers: 编译“ junit:junit:$ { junitVer }”。

25

签出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

它会向您显示哪些依赖项已过时!


如果不想在每个项目中都包含插件,也可以将其添加到初始化脚本中。有关详细信息,请参见另一个问题的答案
劳伦斯·贡萨尔维斯

如果依赖项在同一存储库中,并且您始终想要最新版本,该怎么办?
巴里·凯利

8

最新的Gradle用户指南提到并解释了加号版本:

7.2开始。声明您的依赖项

dependencies {
    compile group: 'org.hibernate', name: 'hibernate-core', version: '3.6.7.Final'
    testCompile group: 'junit', name: 'junit', version: '4.+'
}

...构建脚本还指出,编译项目测试需要任何大于等于4.0的junit。

23.7。依赖项解析如何工作

如果依赖项被声明为动态版本(如1. +),则Gradle会将其解析为存储库中最新的静态版本(如1.2)。对于Maven存储库,这是使用maven-metadata.xml文件完成的,而对于Ivy存储库,这是通过目录列表完成的。


1
重要提示:+不一定采用最新版本。请参阅上面的评论。
哈里·G。

3

在Android Studio中:

如果您使用+的是版本,并且想知道实际使用的是哪个版本,请Project在边栏中选择,然后在下面External Libraries看到使用的实际版本号。


您是指特定的IDE吗?:-)
Inego,

Inego:是的,我把它添加到了答案;-)
lenooh
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.