当前位置: 首页 > 知识库问答 >
问题:

gradle Dependencies:“classpath”关键字的确切含义以及它的文档在哪里?

池阳伯
2023-03-14

我在网上搜索了“gradle classpath site:stackoverflow.com”和“gradle classpath”,只在以下内容中找到了相关信息:
gradle:类路径和编译依赖项之间的区别是什么?

在余登宝的回答中写道:

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

因此,正如我所理解的,classpath也是关键字。我试图在gradle docs中找到它的含义: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/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/organization_gradle_projects.html

这里提到了“编译类路径”。如果classpath关键字仅仅作为compile关键字不推荐使用,为什么文档中没有它?

附言。我是说像在:

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

在回答之后添加

共有1个答案

鄢飞鸾
2023-03-14

正如我所理解的,类路径也是关键字

这是不正确的。类路径编译实现API等等都是配置。Gradle中的配置是树状的,这意味着通常每个配置都是从某个父级扩展而来的:

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

例如,当您在build.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配置是不推荐的。类路径配置仍在使用,但通常只与buildscrpt{}块一起使用。

对于您的示例:

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

Desugars到:

project.getBuildscript().getDependencies().add("classpath", "com.android.tools.build:gradle:3.4.1")
 类似资料:
  • 我在网上搜索了“Gradle classpath site:stackoverflow.com”和“Gradle classpath”,只在以下文件中找到相关信息: Gradle:What is the difference between classpath and compile dependencies? 余登宝的回答是这样写的: 编译'org.hibernate:hibernate-cor

  • 问题内容: 我正在尝试从parse.com实现一些代码,并且在void后发现一个关键字。 我难住了,这是什么?您在第二行看到 该文档没有对此进行说明。我知道关键字用于循环。 有人确认吗? 问题答案: 在命名函数中,我们声明参数并在声明行中返回类型。 在匿名函数中,没有声明行-它是匿名的!因此,我们在正文的开头使用一行来代替。 (这是匿名函数的 完整 形式。但是Swift拥有一系列规则,允许在某些情

  • 这两天我一直在和Git Bash合作。我现在知道了诸如、、、和等基本操作。但我还是不知道Git Bash本身到底是什么! 我已经搜索了很多关于Git Bash的内容,但是我看到的所有站点都集中在它的命令的功能上。我仍然没有为我的问题找到一个好的答案。现在,我想,我在正确的地方得到这个答案!

  • 问题内容: 我熟悉使用python的语句作为确保在引发异常时确保对象完成的方法。这通常看起来像 这是简写 或类可能呈现的其他任何其他敲定例程。 我最近遇到了一段处理OpenGL的代码,它给出了以下内容: 请注意,没有任何关键字。这是否表示仍要调用该类的和方法,但是该对象从未在块中显式使用(即,它通过全局变量或隐式引用工作)?还是有其他含义使我难以理解? 问题答案: 上下文管理器可以 选择 返回一个

  • 本文向大家介绍java volatile关键字的含义详细介绍,包括了java volatile关键字的含义详细介绍的使用技巧和注意事项,需要的朋友参考一下 java volatile关键字 在java线程并发处理中,有一个关键字volatile的使用目前存在很大的混淆,以为使用这个关键字,在进行多线程并发处理的时候就可以万事大吉。 Java语言是支持多线程的,为了解决线程并发的问题,在语言内部引入

  • 问题内容: 我想在同一类对象的各种实例之间共享一个对象。 从概念上讲,在我的程序运行时,类A的所有对象都访问类B的相同对象。 我已经看到这是系统范围的,不鼓励使用它。这是否意味着如果我在实例化类A的对象的同一JVM上运行另一个程序,则这些对象可能会访问与先前程序中访问的对象相同的B对象? 使用静态字段的一般缺陷是什么? 是否有其他选择(不需要大量的实施工作)? 问题答案: 静态不是完全意味着“由所