I am having trouble importing Protobuf generated classes using Gradle.
This is how my project tree looks like:
I've tried marking the packages as Source, I have tried all possible combinations of imports:
import generated.main.grpc.GreeterGrpc;
import main.java.HelloRequest;
import java.*;
import HelloRequest;
None of them works. Here is my build.gradle:
group 'andu'
version '1.0-SNAPSHOT'
apply plugin: 'java'
apply plugin: 'com.google.protobuf'
sourceCompatibility = 1.5
repositories {
mavenCentral()
maven { url "https://plugins.gradle.org/m2/" }
}
buildscript {
repositories {
mavenCentral()
}
dependencies {
classpath 'com.google.protobuf:protobuf-gradle-plugin:0.8.0'
}
}
dependencies {
testCompile group: 'junit', name: 'junit', version: '4.11'
compile 'io.grpc:grpc-protobuf:1.0.0-pre2'
compile 'com.google.protobuf:protobuf-java:3.0.0'
compile 'io.grpc:grpc-stub:1.0.0-pre2'
compile 'io.grpc:grpc-netty:1.3.0'
compile 'io.grpc:grpc-protobuf:1.3.0'
compile 'io.grpc:grpc-stub:1.3.0'
}
sourceSets {
main {
proto {
srcDir 'src/main/proto'
}
java {
srcDirs = ['src/main/java', 'generated/main/java']
}
}
}
protobuf {
protoc {
artifact = "com.google.protobuf:protoc:3.2.0"
}
plugins {
grpc {
artifact = 'io.grpc:protoc-gen-grpc-java:1.3.0'
}
}
generateProtoTasks.generatedFilesBaseDir = 'generated'
generateProtoTasks {
all()*.plugins {
grpc {}
}
}
}
Before I added
generateProtoTasks.generatedFilesBaseDir = 'generated'
all of my generated classes would be added to build/generated/main/java
I had same issues in intellij while in sbt everything worked just fine, its just problem of higlightning it in IDE. I had to go to 'Project structure'->'Modules'->click on 'root'-> 'Depencencies'->'+' sign at the bottom-> Jars or directories -> add your generated dir as dependency.
If you want to generate for java, you have to mention a package name in your proto file like this:
Do that and generate again.
Now import like this:
It may be a little different since I did this in an Android project, but what worked for me was adding
classpath "com.google.protobuf:protobuf-gradle-plugin:0.8.1"
in my root build.gradle and the following in the apps build.gradle.Also don't forget to run a gradle build as only running won't generate the classes automatically unless you have the
build project automatically
option selected in compiler options.I've also made two basic but working examples using gRPC that may be able to help. Example Java project using Maven (if you're open to switching to Maven). And a basic Example Android project using gradle although there are minor differences (I'm using java-lite and okhttp instead of netty).