Gradle - 获取依赖项的最新版本

Yip*_*Yay 86 java dependencies ivy gradle maven

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

检索'junit'依赖关系并采用其最新的'release'版本.

管理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"
    }
    
    Run Code Online (Sandbox Code Playgroud)
  • 尝试使用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]"
    }
    
    Run Code Online (Sandbox Code Playgroud)

也许我误解了一些事情.为什么获得最新版本的依赖是如此艰巨的任务?

jmr*_*ruc 241

获取最新版本有时非常有用 - 例如,您经常发布自己的依赖项.

您可以获得最新版本

compile "junit:junit:+"
Run Code Online (Sandbox Code Playgroud)

或者更好地指定至少主要版本

compile "junit:junit:4.+"
Run Code Online (Sandbox Code Playgroud)

  • 只是为了记录:那应该是双引号!我一直在使用单引号用于我的大多数依赖声明,并发现`code'junit:junit:4.+'`不起作用 (23认同)
  • 您并不总是需要可重现的构建. (6认同)
  • 不应该是"testCompile"而不是"compile"吗?因为版本中不需要工件 (3认同)
  • @SimonForsberg ......没错,但是当您处于开发阶段时,您可能希望(a)遵循_bleeding-edge_或(b)确保v`4.+`的错误修复保持最新的项目._当你到达Alpha,Beta,-RC或-RELEASE阶段时; 我完全同意你需要'_nail_'这些版本到极点.我使用`属性'文件来设置版本说明符:`compile"junit:junit:$ {**junitVer**}"`. (2认同)

Pet*_*ser 43

Gradle目前不支持Maven RELEASE(很少使用和弃用),但它确实支持Ivy latest.release.但是,一般建议是针对确切版本进行构建.否则,构建可以变成彩票.

  • 我经过双重检查.Maven在版本2和版本3中都支持`RELEASE`. (10认同)
  • Grade支持'latest.release'(但不支持'RELEASE').这对于确保您自己的内部库是最新的,经过验证的版本非常有用 - 我当然从不提倡将其用于外部/第三方库,其原因与Peter上面提到的相同. (2认同)

Ben*_*ten 24

查看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'
        [...]
    }
}
[...]
Run Code Online (Sandbox Code Playgroud)

然后你可以使用插件,在项目目录的终端中运行这个命令:

./gradlew dependencyUpdates -Drevision=release
Run Code Online (Sandbox Code Playgroud)

它会告诉你哪些依赖已经过时了!


Run*_*lan 7

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

7.2开始.声明您的依赖项:

dependencies {
    compile group: 'org.hibernate', name: 'hibernate-core', version: '3.6.7.Final'
    testCompile group: 'junit', name: 'junit', version: '4.+'
}
Run Code Online (Sandbox Code Playgroud)

...构建脚本还声明编译项目测试需要任何junit> = 4.0.

23.7开始.依赖解析如何工作:

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