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

gradle Dependencies:“classpath”关键字的确切含义是什么?

祁景山
2023-03-14

我在网上搜索了“Gradle classpath site:stackoverflow.com”和“Gradle classpath”,只在以下文件中找到相关信息:
Gradle:What is the difference between classpath and compile dependencies?

余登宝的回答是这样写的:

编译'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/variant_model.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/organize_gradle_projects.html

有提到“compile classpath”。如果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

因此,据我所知classpath也是关键字

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

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

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

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:类路径和编译依赖项之间的区别是什么? 在余登宝的回答中写道: compile'org.hibernate:hibernate-core:5.0.5.final'是一个模块依赖项声明。编译配置(实现配置现在不推荐使用它。

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

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

  • (...)当您在非托管环境中使用JmsTemplate时,您可以通过使用属性SessionTransact和SessionAccountingEmode来指定这些值(事务和确认模式)。 当您将PlatformTransactionManager与JmsTemplate一起使用时,模板总是被赋予一个事务性JMS会话。(..) (顺便说一句,这是真的--会话是事务性的) 我调试了它不正确的原因,发现:

  • 问题内容: 我是JAVA的新手,因此遇到了这个词。“在方法内部创建的类,在Java中称为本地内部类。如果要调用本地内部类的方法,则必须在方法内部 实例化 该类”。粗体字。任何人都可以帮我解决这个问题。我知道这很尴尬,我应该做更多的研究,但我只是不明白。谢谢。 问题答案: 首先 声明的意思是 : 实例化的 简单含义 是从class创建一个对象 。 什么是物体? 类的实例。从一个类中,我们可以创建许多

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