首页 > 解决方案 > 在 gradle kotlin dsl 中使用 Avro to java 插件

问题描述

我有一个使用 gradle kotlin dsl 构建的 java 项目。

现在我想像这样使用 gradle-avro-plugin https://github.com/davidmc24/gradle-avro-plugin#alternate-usage

在 kotlin dsl 中,我编写了与以下相同的逻辑 -

    plugins {
        java
        id( "com.github.davidmc24.gradle.plugin.avro") version "1.0.0"
    }

    dependencies {
    implementation ("org.apache.avro", "avro", "1.10.1")
    }

    val generateAvro = tasks.register<com.github.davidmc24.gradle.plugin.avro.GenerateAvroJavaTask>("generateAvro") {
    source("src/avro")
    this.setOutputDir(file("dest/avro"))
    }

    configure<org.gradle.api.tasks.compile.JavaCompile> {
       this.source = fileTree(generateAvro)
    }

上面的代码在我运行时返回以下错误grade compileJava-

   > * What went wrong:

'JavaCompile' 类型的扩展不存在。当前注册的扩展类型:[ExtraPropertiesExtension, DefaultArtifactPublicationSet, SourceSetContainer, ReportingExtension, JavaPluginExtension, JavaInstallationRegistry, JavaToolchainService, DistributionContainer, JavaApplication, DefaultAvroExtension]

我该如何解决这个错误?

标签: gradlegradle-plugingradle-kotlin-dsl

解决方案


我有类似的问题,对我有用的是:

    plugins {
        id("com.github.davidmc24.gradle.plugin.avro") version "1.2.0"
    }

    dependencies {
        implementation("org.apache.avro:avro:1.10.1")
    }

    tasks.withType<com.github.davidmc24.gradle.plugin.avro.GenerateAvroJavaTask> {
            setOutputDir(file("src/dest/dir/"))
    }

重要的是我没有注册新任务,只是为每个任务指定了一个新的目标目录,类型为GenerateAvroJavaTask


推荐阅读