【问题标题】:Using protobuf with Gradle (IntelliJ)将 protobuf 与 Gradle (IntelliJ) 一起使用
【发布时间】:2019-02-03 03:29:08
【问题描述】:

我正在尝试使用给定的构建指令here 为简单的 protobuf example 生成代码。我已经尝试了一段时间,但在我的源根目录中看不到任何自动生成的代码。

以下是我的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 工具。这是最突出的解决方案
    SO中给出的

  • 设置构建工具 -> Gradle -> Runner -> Delelgate IDE 构建/运行 gradle 上的操作为 true

  • 彻底重建 gradle 项目。

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

【问题讨论】:

  • 你试过从命令行运行./gradlew build吗?

标签: java gradle intellij-idea protocol-buffers


【解决方案1】:

你已经应用了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 识别生成的源(红色突出显示导入、类等)。请注意智能感知文件大小限制。如果您生成的 protobuf 代码超过了 2500KB 的默认设置,则该文件将被忽略。

    得到帮助 -> 编辑自定义属性并添加适合您的案例的条目,例如 idea.max.intellisense.filesize=4000

    花了半天时间研究不同的源集源文件夹、生成的源以及包含/排除目录。原来我只需要增加这个值

    【讨论】:

      【解决方案3】:

      或者,您可以使用sourceSets

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2019-08-03
        • 2017-08-31
        • 2018-09-24
        • 1970-01-01
        • 2014-10-27
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多