To build a gRPC service with Gradle, Kotlin, and Avro

You're absolutely right! The setSource method is not available in Kotlin DSL the same way it was referenced earlier. Let’s correct the Avro plugin configuration to make it work properly in a Kotlin build.gradle.kts. Below is the corrected version.


Corrected build.gradle.kts

plugins {
    java
    id("com.google.protobuf") version "0.9.1"
    id("com.github.davidmc24.gradle.plugin.avro") version "1.3.0"
}

group = "com.example"
version = "1.0-SNAPSHOT"
java.sourceCompatibility = JavaVersion.VERSION_11

repositories {
    mavenCentral()
}

dependencies {
    implementation("io.grpc:grpc-netty-shaded:1.56.0")
    implementation("io.grpc:grpc-protobuf:1.56.0")
    implementation("io.grpc:grpc-stub:1.56.0")
    implementation("org.apache.avro:avro:1.11.0")
    compileOnly("org.apache.avro:avro-compiler:1.11.0")
    testImplementation("junit:junit:4.13.2")
}

protobuf {
    protoc {
        artifact = "com.google.protobuf:protoc:3.22.0"
    }
    plugins {
        create("grpc") {
            artifact = "io.grpc:protoc-gen-grpc-java:1.56.0"
        }
    }
    generateProtoTasks {
        all().forEach { task ->
            task.plugins {
                create("grpc")
            }
        }
    }
}

avro {
    source = file("src/main/avro")  // Proper syntax for Kotlin DSL
    outputCharacterEncoding = "UTF-8" // Assign using `=`
}

tasks.test {
    useJUnitPlatform()
}

Changes and Fixes

  1. Avro Configuration:

    • In the Avro section, use source = file(...) instead of setSource(...). This aligns with the Kotlin DSL way of assigning values directly.
    • Use outputCharacterEncoding = "UTF-8" directly instead of set(...).
  2. Java Compatibility:

    • No changes required here. java.sourceCompatibility = JavaVersion.VERSION_11 remains valid.

Verify the Setup

To ensure everything works:

  1. Clean the build:

    ./gradlew clean
    
  2. Generate the Protobuf and Avro files:

    ./gradlew generateProto generateAvro
    
  3. Run the application:

    ./gradlew run
    

This version should now resolve the issue you encountered with setSource. Let me know if you encounter any further issues!

댓글

이 블로그의 인기 게시물

Develop a Kafka producer to send messages to a Kafka topic

Using the MinIO API via curl

max_active_runs of Airflow

Boilerplate for typescript server programing

difference between truncate and truncate_preserve in hbase

What are 5 creative things I could do with my kids' art, 아이와 함께하는 창의적 놀이

Parasite of korean movie

Kafka consumer in a Spring Boot application using a scheduled task

To integrate Spring Boot with your gRPC service using Gradle, Java, and Avro

kafka polling vs listen