簡體   English   中英

使用IntelliJ中的Gradle導入Protobuf生成的類

[英]Import Protobuf generated classes using Gradle in IntelliJ

我無法使用Gradle導入Protobuf生成的類。

這就是我的項目樹的樣子:

項目樹:

我已經嘗試將包標記為Source,我已經嘗試了所有可能的導入組合:

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中

自從我在Android項目中執行此操作后可能會有所不同,但對我classpath "com.google.protobuf:protobuf-gradle-plugin:0.8.1"在我的根build.gradle中添加classpath "com.google.protobuf:protobuf-gradle-plugin:0.8.1"以及以下內容應用build.gradle。

也不要忘了運行gradle這個構建因為只有運行不會自動生成類,除非你有build project automatically 選項在編譯器選項中選擇。

apply plugin: 'com.google.protobuf'

protobuf {
    generatedFilesBaseDir = "$projectDir/generated"
    protoc {
        artifact = 'com.google.protobuf:protoc:3.0.0'
    }
    plugins {
        javalite {
            artifact = "com.google.protobuf:protoc-gen-javalite:3.0.0"
        }
        grpc {
            artifact = 'io.grpc:protoc-gen-grpc-java:1.0.3'
        }
    }
    generateProtoTasks {
        all().each { task ->
            task.builtins {
                java
            }
            task.plugins {
                grpc {}
            }
        }
    }
}

//Protobuf
compile 'com.google.protobuf:protobuf-lite:3.0.0'
compile 'com.google.protobuf:protobuf-java:3.0.0'

//GRPC
compile('io.grpc:grpc-protobuf:1.1.1') {
    exclude module: 'jsr305'
}
compile('io.grpc:grpc-okhttp:1.1.1') {
    exclude module: 'jsr305'
}
compile('io.grpc:grpc-stub:1.1.1') {
    exclude module: 'jsr305'
}

我還使用gRPC制作了兩個基本但有效的例子,可以提供幫助。 使用Maven的示例Java項目 (如果您打開切換到Maven)。 並且使用gradle的基本示例Android項目雖然存在細微差別(我使用java-lite和okhttp而不是netty)。

我在intellij中遇到了同樣的問題,而在sbt中一切工作都很好,它只是在IDE中突出顯示它的問題。 我不得不去'項目結構' - >'模塊' - >點擊'root' - >'Depencencies' - >'+'標志在底部 - >罐子或目錄 - >添加你生成的dir作為依賴。

如果要為java生成,則必須在proto文件中提及包名稱,如下所示:

option java_package = "com.example";

做到這一點並再次生成。

現在導入如下:

`import com.example.HelloRequest;`

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM