Gradle:类路径和编译依赖项之间有什么区别?

v9tzhpje  于 2022-11-30  发布在  其他
关注(0)|答案(4)|浏览(173)

在向我的项目添加依赖项时,我从来不确定应该给它们加什么前缀,例如"classpath""compile".
例如,下面的依赖项应该是编译时还是类路径?
另外,这应该在我的 applications build.gradle中还是在 module 特定的build.gradle中?

当前build.gradle(在应用程序级别):

apply plugin: 'java'

repositories {
    mavenCentral()
}

dependencies {
    compile 'org.hibernate:hibernate-core:5.0.5.Final'
    compile 'mysql:mysql-connector-java:5.1.38'
}
mi7gmzs6

mi7gmzs61#

如果 buildscript 本身需要运行某些内容,请使用类路径
如果您的项目需要运行某些内容,请使用compile
buildscript{}块用于build.gradle本身。
对于多项目生成,顶级生成文件用于根项目,特定生成文件用于子项目(模块)。
顶级构建文件,您可以在其中添加所有子项目/模块通用的配置选项。
不要将您的应用程序依赖项放在顶级构建文件中,它们属于单独的模块构建.gradle文件

zy1mlcev

zy1mlcev2#

我猜你在dependencies {}块中引用了compileclasspath,如果是这样的话,它们就是依赖项Configurations
配置只是一组命名的依赖项。
compile配置由Java插件创建。classpath配置通常出现在buildScript {}块中,在该块中需要为build.gradle本身 * 声明依赖项 *(可能是插件)。

tkclm6bt

tkclm6bt3#

如果我没理解错的话,您混淆了Project.dependencies脚本块和Project.buildscript.dependencies脚本块(就像我在回答这个问题时所做的那样)。
我将尝试用我的发现来回答这个问题。
我想你应该已经熟悉了Project.dependencies脚本块。在这个块中,我们声明了源代码所需的依赖项。有几种方法可以声明项目所需的依赖项。请参见Gradle Tutorial: Dependency Types。我只提到与这个问题最相关的部分:
compile 'org.hibernate:hibernate-core:5.0.5.Final'是一个模块依赖项声明。编译配置(现在被实现配置弃用。)只是Implementation only dependencies.的一个关键字,而不是描述依赖项类型的关键字(这里的类型是指教程中定义的三种类型,即模块、文件和项目)。
在Gradle教程中:组织构建逻辑它说:
如果您的构建脚本需要使用外部库,您可以将它们添加到构建脚本本身的类路径中。您可以使用buildscript()方法,传入一个声明构建脚本类路径的闭包来完成此操作。
例如,这与声明Java编译类路径的方式相同。可以使用依赖关系类型中描述的任何依赖关系类型,但项目依赖关系除外。
声明生成脚本类路径后,您可以像使用类路径中的任何其他类一样使用生成脚本中的类。
我希望你现在明白了。
对于classpath "com.android.tools.build:gradle:${Versions.android_gradle_plugin}",我们使用com.android.tools.build:gradle:${Versions.android_gradle_plugin}设置classpath方法,这是一个模块依赖项,由构建脚本本身使用,而不是项目中的源代码。
另一方面,对于compile 'org.hibernate:hibernate-core:5.0.5.Final',我们使用编译配置声明了项目所需的模块依赖项。
tl;dr:classpathcompileimplementation都是关键字,可以在不同的情况下针对依赖项使用。前者用于将依赖项传递给构建脚本,后者是您可能要声明的配置之一。

km0tfn4u

km0tfn4u4#

安卓系统:
项目build.gradle中的类路径--类路径之后的实现仅由gradle自身使用,用于构建脚本中。因此,如果我在项目build.gradle类路径“retrofit...”中添加实现(如retrofit),我无法在我的代码中获得retrofit!!因为--我的代码看不到它,只有构建脚本可以看到它。
gradle中的实现--添加您的代码可以使用的实现!!

相关问题