Импорт буфера протокола не распознается в Intellij - PullRequest
1 голос
/ 10 июля 2020

Я пытаюсь импортировать одно сообщение буфера протокола в другое, но импорт не распознается. Пока я не пытаюсь импортировать один protobuf в другой, генерируется код protobuf (в java), код компилируется и выполняется должным образом.

Я использую:

  • Intellij Idea 2020 v1.3 Unlimited Edition
  • Плагин Protobuf Editor: jvolkman / intellij-protobuf-editor (апрель 2020 г.)
  • Gradle

Мой файл сборки gradle выглядит так:

plugins {
    id 'java'
    id 'com.google.protobuf' version "0.8.8"
}

group 'tech.tablesaw'
version '1.0-SNAPSHOT'

sourceCompatibility = 9.0

def grpcVersion = '1.30.1' // CURRENT_GRPC_VERSION
def protobufVersion = '3.12.0'
def protocVersion = protobufVersion

repositories {
    mavenCentral()
}

test {
    useJUnitPlatform()
}

dependencies {
    implementation "io.grpc:grpc-protobuf:${grpcVersion}"
    implementation "io.grpc:grpc-stub:${grpcVersion}"
    compileOnly "org.apache.tomcat:annotations-api:6.0.53"

    // advanced - need this for JsonFormat
    implementation "com.google.protobuf:protobuf-java-util:${protobufVersion}"

    runtimeOnly "io.grpc:grpc-netty-shaded:${grpcVersion}"
    testImplementation "io.grpc:grpc-testing:${grpcVersion}"

    compile group: 'tech.tablesaw', name: 'tablesaw-core', version: '0.38.1'
    testCompile group: 'org.junit.jupiter', name: 'junit-jupiter-engine', version: '5.6.2'
    testImplementation "org.mockito:mockito-core:2.28.2"
}

protobuf {
    protoc { artifact = "com.google.protobuf:protoc:${protocVersion}" }
    plugins {
        grpc { artifact = "io.grpc:protoc-gen-grpc-java:${grpcVersion}" }
    }
    generateProtoTasks {
        all()*.plugins { grpc {} }
    }
}

// Inform IDEs like IntelliJ IDEA, Eclipse or NetBeans about the generated code.
sourceSets {
    main {
        java {
            srcDirs 'build/generated/source/proto/main/grpc'
            srcDirs 'build/generated/source/proto/main/java'
        }
    }
}

task TablesawServer(type: CreateStartScripts) {
    mainClassName = 'tech.tablesaw.service.TableServiceServer'
    applicationName = 'tablesaw-table-server'
    outputDir = new File(project.buildDir, 'tmp')
}

task TablesawClient(type: CreateStartScripts) {
    mainClassName = 'tech.tablesaw.service.TableServiceClient'
    applicationName = 'tablesaw-table-client'
    outputDir = new File(project.buildDir, 'tmp')
}

, а моя информация о gradle выглядит так:

------------------------------------------------------------
Gradle 5.1.1
------------------------------------------------------------

Build time:   2019-01-10 23:05:02 UTC
Revision:     3c9abb645fb83932c44e8610642393ad62116807

Kotlin DSL:   1.1.1
Kotlin:       1.3.11
Groovy:       2.5.4
Ant:          Apache Ant(TM) version 1.9.13 compiled on July 10 2018
JVM:          9.0.4 (Oracle Corporation 9.0.4+11)
OS:           Mac OS X 10.13.5 x86_64

Вот пример protobuf. импорт column_type.proto завершается неудачно.

syntax = "proto3";

package tech.tablesaw.service.common;

import "tech/tablesaw/service/common/column_type.proto";

option java_multiple_files = true;
option java_package = "tech.tablesaw.service.common";
option java_outer_classname = "ColumnMetaProto";
option objc_class_prefix = "TSW";

// Proto file describing column metadata message.

// A column metadata object
message ColumnMetadata {

  string name = 1;
  int32 size = 2;
  ColumnTypeEnum.ColumnType column_type = 3;
}

И вот файл, который я пытаюсь импортировать:

syntax = "proto3";

package tech.tablesaw.service.common;

option java_multiple_files = true;
option java_package = "tech.tablesaw.service.common";
option java_outer_classname = "ColumnTypeEnum";
option objc_class_prefix = "TSW";

enum ColumnType {
  SHORT = 0;
  INTEGER = 1;
  LONG = 2;
  FLOAT = 3;
  BOOLEAN = 4;
  STRING = 5;
  DOUBLE = 6;
  LOCAL_DATE = 7;
  LOCAL_TIME = 8;
  LOCAL_DATE_TIME = 9;
  INSTANT = 10;
  TEXT = 11;
  SKIP = 12;
}

Наконец, вот где находятся protobufs в файловой системе .

src > main > java
           > proto > tech > tablesaw > service > common > column_metadata.proto
                                                        > column_type.proto

Ответы [ 2 ]

1 голос
/ 11 июля 2020

Взгляните на readme , в котором описывается, как добавлять дополнительные пути.

По умолчанию intellij-protobuf-editor использует настроенные исходные корни проекта в качестве путей импорта protobuf. Если это неверно, вы можете переопределить эти пути в Settings > Languages & Frameworks > Protocol Buffers. Снимите флажок «Настроить автоматически» и добавьте нужные пути. В вашем случае вы должны добавить .../src/main/java/proto (где ... означает любой базовый путь вашего проекта).

1 голос
/ 10 июля 2020

Ответ на этот вопрос был в комментариях к другому вопросу: Ошибка при использовании импорта в файле .proto

Если вы используете IntelliJ IDEA, go в Настройки -> Поддержка Protobuf и добавьте путь к вашему файлу .proto. Это устранит ошибку.

В более современной версии Intellij это делается в плагине intellij-protobuf-editor. Я добавил путь к root моей исходной папки прототипа, и все было хорошо

...