Protocol Buffers in Java class libraries: Understanding the Inner Workings of Kotlin Core

protobuf syntax = "proto3"; message Person { string name = 1; int32 age = 2; repeated string emails = 3; } gradle plugins { id 'com.google.protobuf' version '0.8.15' } protobuf { protoc { artifact = 'com.google.protobuf:protoc:3.17.2' } plugins { grpc { artifact = 'io.grpc:protoc-gen-grpc-java:1.38.1' } } generateProtoTasks { all()*.plugins { grpc {} } } } sourceSets { main { java { srcDirs += "${protobuf.generatedFilesBaseDir}/main/grpc" srcDirs += "${protobuf.generatedFilesBaseDir}/main/java" } } } import com.example.PersonProto.Person; public class Main { public static void main(String[] args) { Person person = Person.newBuilder() .setName("Alice") .setAge(25) .addEmails("alice@example.com") .addEmails("alice@gmail.com") .build(); System.out.println(person.getName()); System.out.println(person.getAge()); System.out.println(person.getEmailsList()); } }