温馨提示:本文翻译自stackoverflow.com,查看原文请点击:java - gradle dependencies: what "classpath" keyword means exactly and where it is documented?
gradle java

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

发布于 2020-04-20 14:43:26

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

于腾宝的回答是这样写的:

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

因此,据我了解,classpath它也是关键字。我想在gradle文档中找到它的含义:https ://docs.gradle.org/current/userguide/declaring_dependencies.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一个,为什么文档中没有它?

附言:我的意思是:

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

在回答后添加:

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

查看更多

提问者
Alexei Martianov
被浏览
5
Francisco Mateo 2020-02-05 20:48

所以据我所知classpath也是关键字

这是不正确的。classpathcompileimplementationapi,和许多都是配置Gradle中的配置是树状的,通常每个配置都从某个父对象扩展:

配置树

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

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

dependencies {
    implementation("org.apache.commons:commons-lang3:3.9")
}

您实际上是在做:

project.getDependencies().add("implementation", "org.apache.commons:commons-lang3:3.9")

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

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

compile 配置的注意不赞成在这里classpath配置仍被使用,但通常仅与该buildscrpt { }块一起使用。

因此,对于您的示例:

buildscript {
    dependencies {
        classpath("com.android.tools.build:gradle:3.4.1")
    }
}

糖到:

project.getBuildscript().getDependencies().add("classpath", "com.android.tools.build:gradle:3.4.1")