gpt4 book ai didi

gradle - 应用插件的不同方法? (Gradle Kotlin DSL)

转载 作者:行者123 更新时间:2023-12-01 00:21:40 25 4
gpt4 key购买 nike

试图将这个项目的构建迁移到 GSK。
我们在 Groovy 中有这个:

allprojects {
apply plugin: 'java'
...
sourceSets {
...
}
sourceCompatibility = ...
}

因此,在弄清楚如何在 Kotlin 中访问插件约定时,我发现:
allprojects {
plugins {
java apply true
}
...
println("Project $name, plugins: ${plugins}") // empty list
val java = the<JavaPluginConvention>() // throws exception
}

但如果你这样做:
allprojects {
apply {
plugin(JavaPlugin::class.java)
}
}

应用插件并且约定变得可访问

什么?

最佳答案

这个问题不是 Kotlin 特有的,而是由于竞争条件造成的。在评估脚本时,它可能尚未将插件添加到类路径中。这是 plugins 的众多原因之一。 block 已创建,因为它是在 buildscript 期间的其余脚本评估之前专门评估的阶段。尽管如此,这种特殊处理仅在此 block 位于脚本顶部时才会执行,而不是在它位于 subprojects 内时执行。或 allprojects block ,因为这些 block 在技术上是任意的,稍后会对其进行评估以确保 buildscript是幂等的。在你的情况下,你只是通过将它放在 allprojects 中来提升比赛。阻止,并且很幸运。

在处理多项目构建时,这是有问题的,但是如果可能,最好在 plugins 中声明插件使用 apply false 阻止受约束的语法将其添加到 buildscript 中的构建类路径中阶段。然后,您可以稍后在脚本评估期间通过插件的 id 应用插件(版本不是必需的,因为它仅用于获取依赖项)。

一个例子:

plugins {
id("org.gradle.sample.hello") version "1.0.0" apply false
}

subprojects {
apply(plugin = "org.gradle.sample.hello")
}

Gradle User Guide在解释如何使用这些以及在多模块项目中需要考虑的平衡方面做得很好。

由于某些插件的编写方式的性质,可能会出现其他问题,但如果插件作者遵循最佳实践指南,你会没事的。

关于gradle - 应用插件的不同方法? (Gradle Kotlin DSL),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48290389/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com