我面前有 build.gradle
并且有一些依赖项声明为 provided
但在 documentation 中我没有看到这个依赖范围。
dependencies {
compile("org.springframework.boot:spring-boot-starter-web:1.2.4.RELEASE")
....
provided 'backport-util-concurrent:backport-util-concurrent:3.1'
provided 'org.javolution:javolution:5.5.1@jar
....
}
这是插件提供的吗?如果是这样,我如何找出它属于哪个插件?
Gradle 中 provided
和 runtime
依赖范围有什么区别?
最佳答案
What is
provided
scope?
假设需要一个jar
来编译您的代码,但该jar 存在于生产环境库集合中。然后您不需要将 jar 与您的项目文件一起打包。为了支持这个要求,Maven 有一个名为 provided
的范围。如果您将任何 jar 依赖项声明为 provided
,那么此 jar 将在编译期间出现在您的类路径中,但不会与您的项目存档一起打包。
provided
范围非常有用,特别是在网络应用程序中。例如,servlet-api.jar
需要出现在您的类路径中才能编译您的项目,但您不需要它来打包 servlet-api.jar
文件与你的 war
。使用 provided
范围可以实现这一要求。
在名为 provided
的 Gradle java
插件中没有定义范围。也不在 war
或 android
插件中。如果你想在你的项目中使用 provided
范围,那么你必须在你的 build.gradle
文件中定义它。以下是在 gradle 中声明 provided
作用域的代码片段:
configurations {
provided
}
sourceSets {
main { compileClasspath += configurations.provided }
}
现在,你的第二个问题:
What is the difference between provided and runtime dependency scope in Gradle?
首先要回答这个问题,我将定义compile
依赖项。 compile
dependencies 是依赖项,它们是编译代码所必需的。现在想象一下,如果您的代码使用名为 X
的库,那么您必须将 X
声明为编译时依赖项。还假设 X
在内部使用另一个库 Y
,并且您将 Y
声明为您的运行时依赖项。
在编译期间,Gradle 会将X
添加到您的类路径中,但不会添加Y
。因为,编译不需要 Y
。但它会将 X
和 Y
与您的项目存档一起打包,因为 X
和 Y
都是运行您的项目所必需的生产环境中的项目存档。通常,生产环境中需要的所有依赖项都称为运行时
依赖项。
在Gradle官方documentation ,它表示 runtime
依赖项是“运行时生产类所需的依赖项。默认情况下,还包括编译时依赖项。” .
现在,如果您已经读到这里,那么您已经知道 provided
是我们不希望出现在 中的
依赖(基本上,我们不希望它与项目存档一起打包)。compile
依赖项>runtime
以下是provided
和runtime
范围的说明。这里,compile
是指编译项目需要的依赖,non-compile
是指项目编译不需要的依赖。
关于java - Gradle 中的“提供”依赖项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30731084/