使用Gradle(IntelliJ)与protobuf

8
我正在尝试根据这里的构建说明为一个简单的protobuf 示例生成代码。我已经尝试了一段时间,但是在我的源根目录中看不到任何自动生成的代码。
以下是我的build.gradle文件。
buildscript {
    ext {
        springBootVersion = '2.0.4.RELEASE'
    }
    repositories {
        mavenCentral()
    }
    dependencies {
        classpath("org.springframework.boot:spring-boot-gradle-plugin:${springBootVersion}")
        classpath "io.spring.gradle:dependency-management-plugin:1.0.3.RELEASE"
        classpath 'com.google.protobuf:protobuf-gradle-plugin:0.8.5'
    }
}

apply plugin: 'java'
apply plugin: 'eclipse'
apply plugin: 'idea'
apply plugin: 'org.springframework.boot'
apply plugin: 'io.spring.dependency-management'
apply plugin: 'com.google.protobuf'

group = 'io.ai.vivid'
version = '0.0.1-SNAPSHOT'
sourceCompatibility = 1.8

repositories {
    mavenCentral()
}

dependencyManagement {
    imports {
        mavenBom 'com.amazonaws:aws-java-sdk-bom:1.11.228'
    }
}

protobuf {
    protoc {
        artifact = "com.google.protobuf:protoc:3.5.1-1"
    }

    generateProtoTasks.generatedFilesBaseDir = 'generated-sources'

    plugins {
        grpc {
            artifact = 'io.grpc:protoc-gen-grpc-java:1.14.0'
        }
    }
    generateProtoTasks {
        all()*.plugins {
            grpc {}
        }
    }
}

dependencies {
    compile 'io.grpc:grpc-netty-shaded:1.14.0'
    compile 'io.grpc:grpc-protobuf:1.14.0'
    compile 'io.grpc:grpc-stub:1.14.0'
}

在我的build.gradle文件中,IntelliJ抱怨它无法解析名称protobuf

我尝试过的方法

  • 在IntelliJ中同步gradle工具。这是Stack Overflow上给出的最突出的解决方案。

  • 设置构建工具 -> Gradle -> 运行器 -> 将IDE构建/运行操作委托给Gradle为true

  • 清理并重新构建gradle项目。

根据我对GitHub帖子的理解,当您使用protobuf插件时,存根将自动为您生成。我错过了什么吗?


你尝试过在命令行中运行 ./gradlew build 吗? - Kun Zhang
3个回答

8
您已经应用了Idea插件,但是您没有配置它。您需要告诉Idea插件在哪里包含生成的源代码。
protobuf {
    generatedFilesBaseDir = "$projectDir/src/generated"
}
idea {
    module {
        sourceDirs += file("${projectDir}/src/generated/main/java");
        sourceDirs += file("${projectDir}/src/generated/main/grpc");
    }
}

您可以查看完整的构建文件示例: build.gradle

2
如果有人在使用IntelliJ时遇到了无法识别生成的源代码(红色高亮导入、类等)的问题,请注意Intellisense文件大小限制。如果您生成的protobuf代码超过默认设置的2500KB,则该文件将被忽略。
可通过以下步骤进行设置:Help -> Edit custom properties,然后添加适合您情况的条目,例如idea.max.intellisense.filesize=4000。
我曾经浪费半天时间在不同的源代码集、生成的源代码以及包含/排除目录上。结果发现我只需要增加这个值即可。

这也是我的问题,谢谢! - cklab

0

或者,您可以使用sourceSets

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接