如果没有配置存储库,Gradle会在哪里查找构建脚本依赖项?

au9on6nz  于 2022-11-14  发布在  其他
关注(0)|答案(2)|浏览(157)

我正在尝试了解Gradle中的buildscript {}块是如何工作的。
我已经了解到,当引用外部插件时,应该使用它内部的repositories {}块:

buildscript {
    repositories {
        gradlePluginPortal()
    }
    dependencies {
        classpath 'com.jfrog.bintray.gradle:gradle-bintray-plugin:1.8.5'
    }
}

apply plugin: 'com.jfrog.bintray'

但我不明白,当buildscript {}块中没有repositories {}块时,Gradle会在哪里查找依赖项。如果我将其从上面的示例中删除,我仍然可以毫无错误地构建我的项目:

buildscript {
    dependencies {
        classpath 'com.jfrog.bintray.gradle:gradle-bintray-plugin:1.8.5'
    }
}

apply plugin: 'com.jfrog.bintray'

在这种情况下,Gradle不应该抛出错误吗?
下面是我的完整build.gradle文件:

buildscript {
    dependencies {
        classpath 'com.jfrog.bintray.gradle:gradle-bintray-plugin:1.8.5'
    }
}

plugins {
    id 'java'
}

apply plugin: 'com.jfrog.bintray'

group 'it.foo'
version '1.0-SNAPSHOT'

我使用Gradle 7.1.1运行此Gradle文件,但使用Gradle 6.1.1时出现了相同的行为。

hc2pp10m

hc2pp10m1#

它确实会抛出错误...
使用Gradle 7.1的上述示例,您可以获得

Starting a Gradle Daemon (subsequent builds will be faster)

FAILURE: Build failed with an exception.

* What went wrong:
A problem occurred configuring root project 'norepo'.
> Could not resolve all artifacts for configuration ':classpath'.
   > Cannot resolve external dependency com.jfrog.bintray.gradle:gradle-bintray-plugin:1.8.5 because no repositories are defined.
     Required by:
         project :
eaf3rand

eaf3rand2#

看起来Gradle在buildscript.repositories中隐式包含了gradlePluginPortal()
gradlePluginPortal()的计算结果为https://plugins.gradle.org/m2
您可以通过更改

com.jfrog.bintray.gradle:gradle-bintray-plugin:1.8.5

在您的build.gradle中,例如

com.jfrog.bintray.gradle:gradle-bintray-plugin:1.8.999

请注意,Gradle的错误消息显示它在https://plugins.gradle.org/m2中进行了搜索,尽管您的buildscript.repositories中并没有显式地包含该内容。

相关问题