[spring-projects/spring-boot]记录如何使用 Gradle Kotlin DSL 配置开发工具

2024-04-10 791 views
4

您好,当前文档说明了如何使用 maven 和 gradle (groovy) 配置 devtools,但缺少如何使用 gradle 和 Kotlin DSL 来配置它:)

对于像我一样刚刚开始使用 gradle 和 Kotlin DSL 的人来说,我可以说从 Groovy DSL 迁移并不简单。经过一段时间的挣扎后,我认为我终于成功地使用 Kotlin DSL 配置开发工具,并且我认为它对其他人可能有用:

代替:

configurations {
    developmentOnly
    runtimeClasspath {
        extendsFrom developmentOnly
    }
}

在 Kotlin DSL 中应该使用:

val developmentOnly = configurations.create("developmentOnly")
configurations.runtimeClasspath.get().extendsFrom(developmentOnly)

也许您可以将其添加到文档中,以便其他人可以更快地找到它?

回答

2

这可能比开发工具更广泛。我们在文档中还有其他 groovy 的 gradle 示例。我认为如果我们决定这样做,我们应该制定如何在 groovy 和 Kotlin 中记录 gradle 片段的一般策略(类似于Spring Boot Gradle 插件)。让我们看看团队其他成员的想法。

3

我不确定我们是否应该尝试在主要参考文档中涵盖 Groovy 和 Kotlin Gradle 配置,特别是当它是标准 Gradle 而不是特定于我们的插件时。 Gradle 自己的文档已经展示了如何做到这一点。

4

@mkurcius 嗨。因为你,我解决了我的问题。

首先,我不太了解gradle。我在 IntelliJ IDEA 上使用 Spring Boot 2.1.5.RELEASE 和 Spring Initializr。但是当我在同一环境中使用 Spring Boot 2.1.6.RELEASE 时,IntelliJ IDEA 无法解析“developmentOnly”。

我改变了这个

configurations {
    developmentOnly
    runtimeClasspath {
        extendsFrom(configurations.developmentOnly.get())
    }
    compileOnly {
        extendsFrom(configurations.annotationProcessor.get())
    }
}

val developmentOnly = configurations.create("developmentOnly")
configurations {
    developmentOnly
    runtimeClasspath {
        extendsFrom(developmentOnly)
    }
    compileOnly {
        extendsFrom(configurations.annotationProcessor.get())
    }
}

谢谢你!

3

@venzersiz 我很高兴能提供帮助:)

5

这已经困扰我几个小时了。 @mkurcius @venzersiz 谢谢!你的解决方案也对我有用。

7

非常感谢@mkurcius 和@venzersiz。我也遇到了同样的问题,不知道该怎么办,直到找到这个解决方案。

2
  • 好主意 ?记录这个
  • 更好的想法是让它发挥作用out of the box
4
developmentOnly("org.springframework.boot:spring-boot-devtools")
dependencies {
      developmentOnly("org.springframework.boot:spring-boot-devtools")
}
9

我想要得到:testCompile.extendsFrom compileOnly与 Kotlin DSL 兼容(https://stackoverflow.com/questions/62452133/gradle-kotlin-dsl-extendsfrom)。

到目前为止,尝试时它不起作用:

configurations {
        testCompile {
            val executableJarsCompileOnly = configurations.create("compileOnly")
            extendsFrom(executableJarsCompileOnly)
        }
    }

它失败了:

NamedDomainObjectContainer#create(String) on configuration container cannot be executed in the current context.

你有什么指示出什么问题了吗?

8
configurations {
        testCompile {
            extendsFrom(configurations.compileOnly.get())
        }
    }

哈——终于。这看起来更好

0

developmentOnly现在会自动创建配置。