我们有一个插件,它定义了其他属性并将它们添加为扩展属性,如下所示:
project.extra["copyright"] = "Copyright ..."然后,在构建脚本中,我可以访问以下内容:
project.extra["copyright"]我只想写:
project.copyright一些Gradle插件似乎做了类似的事情。我可以访问project.sourceSets或project.kotlin,即使它们肯定不在Project接口中。
使用IDE,我可以钻研这些方便的方法,然后让我使用一些自动生成的代码,所以我知道它是在某个地方自动生成的,但是我还没有找到任何线索来帮助我们自己的插件实现这一点。Gradle docs 提到类型安全访问器最终使我得以表达这个问题,但文档并没有说明如何添加新的。
我们如何为我们自己的插件获得这种治疗?
发布于 2022-05-29 13:13:10
创建类似DSL的APIS记录在这里:原料药。
做起来很容易。这是一个快速指南,还有一些提示。
Property<String>而不是String,尽管两者都能工作。我建议使用与懒惰配置兼容的类型。myPlugin(configure:操作):Unit =(这是org.gradle.api.plugins.ExtensionAware).extensions.configure("myPlugin",配置)copyright集设置一个默认值。
抽象类MyPlugin : Plugin {重写乐趣应用(项目:项目){ val myExtension: MyExtension = project.extensions.create("myPlugin",MyExtension::class.java) project.tasks.register("myCustomTask",MyTask::class.java) { copyright.set(myExtension.copyright) }}
MyExtension和MyTask都使用Property<String>是很好的--实际值将被延迟地评估,并且只有在需要时才会这样做。
现在,如果我运行./gradlew :myCustomTask,我会看到:任务:myCustomTask版权是blah 2022进一步阅读
https://stackoverflow.com/questions/72399229
复制相似问题