Gradle Spring Boot Devtools:developmentOnly 和 runtimeClasspath
Posted
技术标签:
【中文标题】Gradle Spring Boot Devtools:developmentOnly 和 runtimeClasspath【英文标题】:Gradle Spring Boot Devtools: developmentOnly and runtimeClasspath 【发布时间】:2020-04-02 18:26:45 【问题描述】:我对@987654321@建议的gradle
文件中使用的这段代码感到困惑
configurations
developmentOnly
runtimeClasspath
extendsFrom developmentOnly
dependencies
developmentOnly("org.springframework.boot:spring-boot-devtools")
我想我必须声明developmentOnly
配置,因为它要在dependencies
块中使用,但是为什么我需要runtimeClasspath
的行?实际上,我尝试删除项目中的线条,并且项目构建得非常好。
configurations
developmentOnly
dependencies
developmentOnly("org.springframework.boot:spring-boot-devtools")
Java 插件是否使用runtimeClasspath
? (正如doc 所建议的那样)如果我不包括runtimeClasspath
的这些行,会有什么不好的副作用吗?
更新(2019-12-10)
我还可以确认,在没有runtimeClasspath
指令的情况下构建的可执行 jar 运行良好。所以我真的不知道那个指令在做什么。
【问题讨论】:
您可以在引发此更改的原始问题中阅读更多信息:github.com/spring-projects/spring-boot/issues/14451 @FranciscoMateo,感谢您的指点。我已经阅读了问题讨论,但仍然不太明白。似乎runtimeClasspath
被某人以某种方式使用,但我不知道如何以及谁。我已经重新阅读了有关 Java 插件的文档——但无济于事。 docs.gradle.org/current/userguide/building_java_projects.html
【参考方案1】:
您只需要在运行时使用 spring-boot-devtools,这就是我们使用 runtimeClasspath 配置的原因。
更多详情:https://docs.gradle.org/current/userguide/java_library_plugin.html#sec:java_library_configurations_graph
【讨论】:
【参考方案2】:developmentOnly
是您添加的新配置。
runtimeClasspath
配置由Java Library Plugin
添加。
您指定 runtimeClasspath
配置扩展自您的 developmentOnly
配置。
您将spring-boot-devtools
设置为developmentOnly
配置的依赖项,这将使runtimeClasspath
也依赖于spring-boot-devtools
。
我实际上尝试删除项目中的线条,并且项目构建得非常好。
我认为这是因为依赖是针对运行时的,而不是针对构建时的。
我还可以确认,在没有 runtimeClasspath 指令的情况下构建的可执行 jar 运行良好。
我认为这是因为spring-boot-devtools
仅适用于开发模式,例如当您使用./gradlew bootRun
执行bootRun
任务时。
【讨论】:
以上是关于Gradle Spring Boot Devtools:developmentOnly 和 runtimeClasspath的主要内容,如果未能解决你的问题,请参考以下文章
飞舞的spring boot2(52)——Spring Boot Gradle插件