java - 在 IntelliJ 中使用 Gradle 导入 Protobuf 生成的类

标签 java intellij-idea gradle protocol-buffers grpc

我在使用 Gradle 导入 Protobuf 生成的类时遇到问题。

我的项目树是这样的:

Project tree:

我已经尝试将包标记为源,我已经尝试了所有可能的导入组合:

import generated.main.grpc.GreeterGrpc;
import main.java.HelloRequest;
import java.*;
import HelloRequest;

它们都不起作用。这是我的 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 {}
        }
    }
}

在我添加之前

generateProtoTasks.generatedFilesBaseDir = 'generated'

我所有生成的类都将添加到 build/generated/main/java

最佳答案

来自:https://medium.com/@DivyaJaisawal/generate-java-code-from-proto-file-using-gradle-1fb9fe64e046

Protobuf 插件假定 Protobuf 文件 (*.proto) 的组织方式与 Java 源文件相同,在 sourceSets 中。 sourceSet 的 Protobuf 文件在单个 protoc 运行中编译,生成的文件被添加到该 sourceSet () 的 Java 编译运行的输入中。

sourceSets {
    main {
        java {
            srcDirs 'build/generated/source/proto/main/grpc'
            srcDirs 'build/generated/source/proto/main/java'
        }
    }
}

关于java - 在 IntelliJ 中使用 Gradle 导入 Protobuf 生成的类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44088009/

相关文章:

java - 程序类型已经存在 com.google.gson.FieldAttributes

java - 仅在多项目构建中为相互依赖的项目编译 java 类

java - 如何以编程方式更改 Tab 键停止索引并在 javafx 中禁用

Java8 : convert one map to another map using stream

javascript - 在 Intellij Idea 中启用对 Ext.js 的 JSHint 支持

spring-boot - Git commit可以立即工作,但是在intellij中,gradle清理构建将花费近5分钟。重新同步在几秒钟内发生

gradle - 如何从依赖列表中的项目中收集带有源的jar?

java - 为什么我们不需要一个惰性初始化 getter 来同步(持有者习惯用法)?

java - 加密我的 Android 应用程序中的数据库条目

java - 适用于Google Action的Java Servlet无法正常工作,日志显示 list 错误