dev*_*ull 16 java dependency-management gradle
我build.gradle在我面前有一些声明的依赖项,provided但在文档中我没有看到这个依赖范围.
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
....
}
Run Code Online (Sandbox Code Playgroud)
这是由插件提供的吗?如果是这样,我怎么知道它属于哪个插件?
Gradle provided与runtime依赖范围有什么区别?
Saz*_*man 39
什么是
provided范围?
假设jar编译代码需要a ,但jar存在于生产环境库集合中.然后,您不需要将jar打包到项目档案中.为了支持这一要求,Maven有一个名为的范围provided.如果您声明任何jar依赖项provided,那么此jar将在编译期间出现在您的类路径中,但不会与您的项目存档一起打包.
provided范围非常有用,特别是在Web应用程序中.例如,servlet-api.jar需要在您的类路径中出现以编译您的项目,但是您不需要使用它来打包servlet-api.jar文件war.使用provided范围可以达到此要求.
Gradle java插件中没有定义Scope provided.也不在插件war或android插件中.如果要provided在项目中使用范围,则必须在build.gradle文件中定义范围.以下是provided在gradle中声明范围的代码段:
configurations {
provided
}
sourceSets {
main { compileClasspath += configurations.provided }
}
Run Code Online (Sandbox Code Playgroud)
现在,你的第二个问题:
Gradle中提供的和运行时依赖范围有什么区别?
要首先回答这个问题,我将定义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引用项目编译不需要的依赖项.
从gradle 2.12开始,您可以使用compileOnly选项。
看到
https://blog.gradle.org/introducing-compile-only-dependencies
为了进一步说明,从最新版本开始,Gradle 5.5 具有compileOnly(与 相同provided)和runtimeOnly选项。新的默认“编译和运行时”选项是implementation.
| 归档时间: |
|
| 查看次数: |
14623 次 |
| 最近记录: |