build.gradle - gRPC 生成的 java 文件被重复或重新生成:类 ClassNameGrpc 是公共的,应在名为 ClassNameGrpc 的文件中声明
问题描述
我创建了一个带有 2 个模块的 gradle java 项目:
- grpc客户端模块
- grpc服务器模块
当我构建它们时,由于某种原因,grpc 和 protobuf 文件不止一次生成。第二个文件生成后缀为“2”,因此引发错误,如下面的屏幕截图所示。
gradle 文件如下,在客户端和服务器中是一样的。
apply plugin: 'java'
apply plugin: 'com.google.protobuf'
repositories {
mavenCentral()
}
def grpcVersion = '1.24.1'
dependencies {
compile "io.grpc:grpc-netty:${grpcVersion}"
compile "io.grpc:grpc-protobuf:${grpcVersion}"
compile "io.grpc:grpc-stub:${grpcVersion}"
compile 'com.google.protobuf:protobuf-java:3.9.2'
}
buildscript {
repositories {
mavenCentral()
}
dependencies {
classpath 'com.google.protobuf:protobuf-gradle-plugin:0.8.10'
}
}
protobuf {
protoc {
artifact = 'com.google.protobuf:protoc:3.9.2'
}
plugins {
grpc {
artifact = "io.grpc:protoc-gen-grpc-java:${grpcVersion}"
}
}
generateProtoTasks {
all()*.plugins {
grpc {}
}
}
}
sourceSets {
main {
java {
srcDirs 'build/generated/source/proto/main/grpc'
srcDirs 'build/generated/source/proto/main/java'
}
}
}
jar {
manifest {
attributes "Main-Class": "ecommerce.ecommerce.OrderMgtServer"
}
from {
configurations.compile.collect { it.isDirectory() ? it : zipTree(it) }
}
}
// Generate IntelliJ IDEA's .idea & .iml project files
apply plugin: 'idea'
// Provide convenience executables for trying out the examples.
apply plugin: 'application'
startScripts.enabled = false
解决方案
只用一个sourceSets {main { java
·添加java
插件和protobuf
你版本的插件build.gradle
。
plugins {
id 'java'
id 'com.google.protobuf' version '0.8.10'
id 'idea'
}
dependencies {
implementation "io.grpc:grpc-netty-shaded:$grpc_version"
implementation "io.grpc:grpc-protobuf:$grpc_version"
implementation "io.grpc:grpc-stub:$grpc_version"
implementation "io.grpc:grpc-services:$grpc_version" // reflection
}
sourceSets.main.java.srcDir new File(buildDir, 'generated/source')
idea {
module {
// Marks the already(!) added srcDir as "generated"
generatedSourceDirs += file('build/generated/source')
}
}
编辑后build.gradle
执行 atask -> clean
和task -> generateProtobuff
. 我认为你可以用它来解决你的错误。关于dependencies.compile
我不确定它是否会影响。但我正在使用dependencies.implementation
.
推荐阅读
- mysql - 如何在 MySQL 中获取 MAX 值?
- tensorflow - 如何使用tfhub提供的efficientnet-lite进行tf2.1的二次训练
- php - Codeigniter 视图 - 在另一个之前添加项目
- yii2 - Yii2 缩短 where () 和 orWhere ()
- python-3.x - place_forget() 的问题
- linux - Bash/ZSH 终端提示时间和日期
- javascript - React Links 跨页面传递变量
- mysql - SQL查询比较日期和时间mysql
- python - 使用破折号将小部件值导出到文件中
- c - 如何将二进制 0001,0010,0100,1000 转换为 0,1,2,3 以索引 4x4 二维数组?