正如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) . 内部错误:无法编译脚本,请参阅日志以获取详细信息
下面添加了 plugins
和 buildscript
块:
我看到这是由 kotlinDslAccessorsReport
生成的:
但说实话,我不知道这对我有什么帮助 .
1 回答
为了在应用插件的编译时间之前让
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"类,因为其他扩展添加到它here和here(可能还有其他地方) . 这意味着我们需要做一些类转换技巧才能配置这个对象 . 源代码是IMO真正弄清楚如何访问这些类型对象的唯一方法 .下面显示了我们如何配置
deploy
扩展,这是DeployExtension以及我们如何配置run
扩展,这是RunExtension .有几种不同的方法可以实现上述目标,但这就是我采用的方法 . 插件本身应该提供更友好的配置方法,直到kotlin-dsl/457被解析,所以我打开an issue