无法创建gradle插件扩展的实例
我正在尝试使用kotlin
编写gradle
插件。 它应该这样工作。 同时提供配置
apply plugin: 'appenv' app { srcLink "" downloadPath "" }
它应该允许从srcLink
下载文件并使用任务downloadAll
将其存储在downloadAll
我创建了扩展类
open class ApplicationEnvironmentExtension { val project: Any? constructor(project: Any?) { this.project = project } var srcLink: String = "" var downloadPath: String = "" }
创建插件类
class ApplicationEnvironmentPlugin : Plugin<Project> { override fun apply(project: Project) { project.extensions.create("app", ApplicationEnvironmentExtension::class.java) project.task(mapOf ("type" to Download::class.java), "downloadAll") } }
在这里他的任务
class Download : DefaultTask() { @TaskAction fun download() { val extension = this.project.extensions.getByName("app") as ApplicationEnvironmentExtension DownloadUtils.download(extension.srcLink, extension.downloadPath) } }
我构建它并将其作为jar
依赖项添加到我的项目中。 要检查是否添加了任务,我运行gradle tasks
。 但在这期间,我得到了错误
Could not create an instance of type com.lapots.gradle.plugins.appenv.ApplicationEnvironmentExtension_Decorated.
在stacktrace我得到
Caused by: org.gradle.internal.reflect.ObjectInstantiationException: Could not create an instance of type com.lapots.gradle.plugins.appenv.ApplicationEnvironmentExtension_Decorated. at org.gradle.internal.reflect.DirectInstantiator.newInstance(DirectInstantiator.java:53) at org.gradle.api.internal.ClassGeneratorBackedInstantiator.newInstance(ClassGeneratorBackedInstantiator.java:36) at org.gradle.api.internal.plugins.DefaultConvention.create(DefaultConvention.java:106) at com.lapots.gradle.plugins.appenv.ApplicationEnvironmentPlugin.apply(ApplicationEnvironmentPlugin.kt:11) at com.lapots.gradle.plugins.appenv.ApplicationEnvironmentPlugin.apply(ApplicationEnvironmentPlugin.kt:8) at org.gradle.api.internal.plugins.ImperativeOnlyPluginApplicator.applyImperative(ImperativeOnlyPluginApplicator.java:35) at org.gradle.api.internal.plugins.RuleBasedPluginApplicator.applyImperative(RuleBasedPluginApplicator.java:43) at org.gradle.api.internal.plugins.DefaultPluginManager.doApply(DefaultPluginManager.java:144) ... 58 more Caused by: java.lang.IllegalArgumentException: Could not find any public constructor for class com.lapots.gradle.plugins.appenv.ApplicationEnvironmentExtension_Decorated which accepts parameters []. at org.gradle.internal.reflect.DirectInstantiator.newInstance(DirectInstantiator.java:44) ... 65 more
问题是什么? 我应该为扩展提供一些附加构造函数吗?
扩展需要一个默认的(无参数)构造函数。 如果你真的需要在你的扩展中为一个值赋值一个字段,你可以使用lateinit var
并在插件中创建扩展名后赋值。
在这种情况下,它看起来并不需要你的project
领域,所以你可以摆脱那个和构造函数。 否则,如果你确实需要这个字段,仍然会移除这个构造函数,但是你需要使project
的默认值为null
。
- Gradle构建扫描错误:事件接收器已关闭
- 即使没有任何更改,Android多模块Gradle构建也会很慢
- 将Kotlin下载到Android Studio时出现与证书相关的错误
- 编译Groovy和Kotlin?
- 在新的Android Studio项目中配置Kotlin
- 在运行应用程序时,Intellij不包括对classpath的gradle依赖
- 在kotlin中为Gradle脚本配置IntelliJ自动完成
- Gradle同步失败:无法GET'https://jcenter.bintray.com/org/jetbrains/kotlin/kotlin-gradle-plugin/1.1.3-2/kotlin-gradle-plugin-1.1.3-2.pom'
- 在Gradle usin Kotlin中构建JAXB类