什么是范围?provided
假设编译代码需要 a,但 jar 存在于生产环境库集合中。然后,您无需将jar与项目存档打包在一起。为了支持此要求,Maven 有一个名为 的作用域。如果将任何 jar 依赖项声明为 ,则在编译期间,此 jar 将存在于类路径中,但不会与项目归档一起打包。jar
provided
provided
provided
范围非常有用,特别是在Web应用程序中。例如,需要存在于类路径中才能编译项目,但不需要将其与 .有了范围,就可以达到这个要求。servlet-api.jar
servlet-api.jar
war
provided
在名为 的 Gradle 插件中没有定义作用域。也不在 插件 或 插件。如果要在项目中使用作用域,则必须在文件中定义它。下面是在 gradle 中声明作用域的代码片段:java
provided
war
android
provided
build.gradle
provided
configurations {
provided
}
sourceSets {
main { compileClasspath += configurations.provided }
}
现在,您的第二个问题:
Gradle 中提供的依赖项范围和运行时依赖项范围之间有什么区别?
为了回答这个问题,我将首先定义依赖关系。 依赖关系是依赖关系,这些是编译代码所必需的。现在想象一下,如果你的代码使用名为 then 的库,则必须声明为编译时依赖项。还要想象一下,它在内部使用另一个库,并且您声明为运行时依赖项。compile
compile
X
X
X
Y
Y
在编译期间,Gradle 将添加到您的类路径中,但不会添加 。因为, 不是编译所必需的。但是,它将打包两者,并将与项目存档打包在一起,因为两者都是在生产环境中运行项目存档所必需的。通常,生产环境中所需的所有依赖项都称为依赖项。X
Y
Y
X
Y
X
Y
runtime
在Gradle官方文档中,它说依赖性是“生产类在运行时所需的依赖关系。默认情况下,还包括编译时依赖项。runtime
现在,如果你已经读到这里,那么你已经知道这是我们不希望存在于依赖关系中的依赖关系(基本上,我们不希望它与项目存档一起打包)。provided
compile
runtime
以下是 和 范围的说明。这里,是指编译项目所需的依赖项,并引用项目编译不需要的依赖项。provided
runtime
compile
non-compile
