gradle 依赖项:“classpath”关键字的确切含义是什么以及它的记录位置?

Ale*_*nov 1 java gradle

我在网络上搜索了“gradle classpath site:stackoverflow.com”和“gradle classpath”,并仅在以下位置找到了相关信息:
Gradle:类路径和编译依赖项之间有什么区别?

余登宝的回答中写道:

compile 'org.hibernate:hibernate-core:5.0.5.Final' 是一个模块依赖声明。编译配置(现在已被实现配置弃用。)只是仅实现依赖项的关键字。它不是描述它是什么类型的依赖关系的关键字(这里按类型我遵循教程中定义的三种类型,即模块、文件和项目。)

据我了解,classpath这也是关键字。我试图在 gradle 文档中找到它的含义: https ://docs.gradle.org/current/userguide/declaring_dependency.html

其中引用了其他一些内容:
https://docs.gradle.org/current/userguide/dependency_management_for_java_projects.html https://docs.gradle.org/current/userguide/java_library_plugin.html https://docs.gradle.org /current/dsl/org.gradle.api.artifacts.Configuration.html https://docs.gradle.org/current/userguide/variant_model.html https://docs.gradle.org/current/userguide/java_plugin.html

另外: https://docs.gradle.org/current/javadoc/org/gradle/api/initialization/dsl/ScriptHandler.html https://docs.gradle.org/current/javadoc/org/gradle/api/tasks /Classpath.html https://docs.gradle.org/current/userguide/organizing_gradle_projects.html

其中提到了“compileClasspath”。如果classpath关键字只是被弃用compile,为什么文档中没有它?

PS我的意思是像:

buildscript {
    repositories {
        jcenter()
        maven {
            url 'https://maven.google.com/'
            name 'Google'
        }
        google()
    }
    dependencies {
        classpath 'com.android.tools.build:gradle:3.4.1'
   }
}
Run Code Online (Sandbox Code Playgroud)

回答后添加:

在gradle源代码中搜索getBuildscript(): 在gradle源代码中搜索getBuildscript()

Fra*_*teo 10

据我了解classpath也是关键字

这是不正确的。classpath、、、、等等都是配置compile​ Gradle 中的配置是树状的,这意味着通常每个配置都从某个父级扩展:implementationapi

配置树

来源:https ://docs.gradle.org/current/userguide/java_library_plugin.html#sec:java_library_configurations_graph

例如,使用implementation 配置,当您在 中执行以下操作时build.gradle

dependencies {
    implementation("org.apache.commons:commons-lang3:3.9")
}
Run Code Online (Sandbox Code Playgroud)

你实际上在做:

project.getDependencies().add("implementation", "org.apache.commons:commons-lang3:3.9")
Run Code Online (Sandbox Code Playgroud)

前者使用Gradle DSL,后者直接使用 Gradle API。

如果classpath关键字只是被弃用compile,为什么文档中没有它?

如此处所述,该compile 配置已被弃用。该配置仍然使用,但通常仅与块一起使用。classpathbuildscrpt { }

所以对于你的例子:

buildscript {
    dependencies {
        classpath("com.android.tools.build:gradle:3.4.1")
    }
}
Run Code Online (Sandbox Code Playgroud)

脱糖至:

project.getBuildscript().getDependencies().add("classpath", "com.android.tools.build:gradle:3.4.1")
Run Code Online (Sandbox Code Playgroud)