Gradle buildscript 依赖项

225

在 Gradle 构建中,将仓库声明在 buildscript 部分和根级别的构建中有什么区别?

buildscript {
    repositories {
        mavenCentral();
    }
}

对抗

repositories {
    mavenCentral();
}
2个回答

202

buildscript区块中的仓库用于获取您的buildscript依赖项的依赖关系。这些依赖关系被放置在构建类路径上,您可以在构建文件中引用它们。例如:互联网上存在的额外插件。

根级别上的仓库用于获取您的项目所依赖的依赖项。因此,所有编译您的项目所需的依赖项都在其中。


29
如果我的构建脚本和项目都需要Maven中央库,我需要声明两次吗? - Marcin Koziński
28
是的,你确实需要重复说明两次。 - Hiery Nomus
作为一个例子,Spring propdeps插件可以添加到buildscript中,以启用“provided”和“optional”关键字来处理依赖项,除了通常的“compile”和“testCompile”关键字之外。注意:war插件已经提供了“provided”关键字,你只需要在将jar项目部署到war中时使用propdeps。 - Powerlord

31

我希望能够给您一个清晰的概念。为此,我附上了build.grade的代码快照,以便更好地理解。

buildscript依赖项:

buildscript {
    repositories {
        maven { url("https://plugins.gradle.org/m2/") }
    }

    dependencies {
        classpath 'net.saliman:gradle-cobertura-plugin:2.3.2'
        classpath 'com.netflix.nebula:gradle-lint-plugin:latest.release'
    }
}

根级/核心依赖项:

repositories{
    mavenLocal()
    maven { url("https://plugins.gradle.org/m2/") }
    maven { url "https://repo.spring.io/snapshot" }
}

dependencies {
        //Groovy
        compile group: 'org.codehaus.groovy', name: 'groovy-all', version: '2.3.10'

        //Spock Test
        compile group: 'org.spockframework', name: 'spock-core', version: '1.0-groovy-2.3'

        //Test
        testCompile group: 'junit', name: 'junit', version: '4.10'
        testCompile group: 'org.testng', name: 'testng', version: '6.8.5'
}

所以,首先我想澄清一下一些单词:

i) buildscript 依赖的 jar 文件将从 buildscript 仓库中下载。[项目外部依赖]

ii) 根级别依赖的 jar 文件将从根级别仓库中下载。[项目依赖]

在此,
“buildscript” 块只控制构建脚本过程本身的依赖关系,而不是应用程序代码。各种 Gradle 插件如 gradle-cobertura-plugin、gradle-lint-plugin 可从 buildscript 仓库中找到。这些插件不会作为应用程序代码的依赖项被引用。
但是对于项目编译和测试运行的 jar 文件,例如 groovy all jar、junit 和 testng jar,将从根级别仓库中找到。
并且另一件事,maven { url("https://plugins.gradle.org/m2/") } 部分可以在两个块中使用。因为它们用于不同的依赖关系。 资源链接:dependencies within buildscript closure and core 的区别

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接