首页 文章

如何使用Kotlin DSL配置AppEngine Gradle插件

提问于
浏览
1

正如https://cloud.google.com/appengine/docs/standard/java/tools/gradle-reference中所述,AppEngine Gradle插件提供如下配置:

使用 build.gradlke.kts 时,这样的配置应该怎么样?

我正在寻找AppEngine任务,但不明白将其连接到正确的Kotlin DSL设置 .

当简单地将上述块添加到 build.gradle.kts IntelliJ抱怨时:

  • 未解决的参考:端口

  • 未解决的参考:部署

当从cml运行Gradle时,我得到:

无法打开缓存目录azhqxsd1d4xoovq4o5dzec6iw(/Users/test/.gradle/caches/4.5/gradle-kotlin-dsl/azhqxsd1d4xoovq4o5dzec6iw) . 内部错误:无法编译脚本,请参阅日志以获取详细信息

下面添加了 pluginsbuildscript 块:

我看到这是由 kotlinDslAccessorsReport 生成的:

但说实话,我不知道这对我有什么帮助 .

1 回答

  • 2

    为了在应用插件的编译时间之前让 kotlin-dsl 生成静态访问器,必须使用 plugins {} 块而不是 buildscript {} 块 . buildscript {} 仍然会使脚本类路径可以看到依赖项,但是你不会得到它们 .

    正如您所注意到的,插件的Maven坐标可能与插件ID不同 . 您可以使用pluginManagement规范在 settings.gradle 中处理此问题(Android插件的示例是here . 以下是我如何处理(并使用 war 插件进行最小化应用):

    现在,我已经应用了插件, kotlin-dsl 将在脚本编译之前生成访问器 .

    运行 ./gradlew kotlinDslAccessorsReport 并仔细阅读它我在输出中看到了这个:

    现在,您可以看到 appengine { ... } 代码块在顶层正常工作 . 我们只需根据其类型找出可以进入的内容 . 请注意,如果我们使用 buildscript {} 而不是 plugins {} ,您必须自己复制/粘贴这些访问者,或者在构建脚本中执行类似 extensions.getByType(com.google.cloud.tools.gradle.appengine.core.AppEngineExtension::class) 的操作 .

    做一些搜索,你可以找到 AppEngineExtension on GitHub的源代码 . 不幸的是,它没有任何方法或字段 . 它基本上用作"extension holder"类,因为其他扩展添加到它herehere(可能还有其他地方) . 这意味着我们需要做一些类转换技巧才能配置这个对象 . 源代码是IMO真正弄清楚如何访问这些类型对象的唯一方法 .

    下面显示了我们如何配置 deploy 扩展,这是DeployExtension以及我们如何配置 run 扩展,这是RunExtension .

    有几种不同的方法可以实现上述目标,但这就是我采用的方法 . 插件本身应该提供更友好的配置方法,直到kotlin-dsl/457被解析,所以我打开an issue

相关问题