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 【问题描述】:

我对@9​​87654321@建议的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的主要内容,如果未能解决你的问题,请参考以下文章

QueryDSL、spring-boot 和 Gradle

spring boot + gradle[草稿]

飞舞的spring boot2(52)——Spring Boot Gradle插件

多模块 Spring Boot 项目中的 Gradle 依赖插件

使用Spring Boot Gradle插件的多模块项目

如何在 gradle 中获取 spring-boot 依赖版本?