grpc-gradle与grpc流程完美整合(3)

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/u011262847/article/details/76039648

按照之前文章的方法来自动自动生成proto的代码,然后手动从build复制到src代码中去,当执行gradle build编译的时候会抛错提示类重复,因为执行gradle build,这个命令依赖于gradle generateProto命令,也就是会生成两次相同的类文件,所以会抛出类重复。

修改build.gradle中的protobuf plugin的相关配置来自动将proto生成的代码放入到指定目录,达到完美整合。

protobuf {
    protoc {
        artifact = "com.google.protobuf:protoc:3.2.0"
    }
    plugins {
        grpc {
            artifact = 'io.grpc:protoc-gen-grpc-java:1.4.0'
        }
    }

    generatedFilesBaseDir = "src"

    generateProtoTasks {
        all()*.plugins {
            grpc {
                outputSubDir = "java"
            }
        }
    }
}

generatedFilesBaseDir将生成的代码放入到指定的目录,outputSubDir可以看做generatedFilesBaseDir下的指定目录。因为这两个参数都有默认目录路径,可以尝试修改之后再生成文件查看之间的差别。

分析一下官方所描述的:

Change where the generated files are
By default generated Java files are under generatedFilesBaseDir/sourceSet/builtinPluginName,wheregeneratedFilesBaseDir is $buildDir/generated/source/proto by default, and is configurable. E.g.,

protobuf {
  ...
  generatedFilesBaseDir = "$projectDir/src/generated"
}

The subdirectory name, which is by default $builtinPluginName, can also be changed by setting the outputSubDir property in the builtins or plugins block of a task configuration within generateProtoTasks block (see previous section). E.g.,

{ task ->
  task.plugins {
    grpc {
      // Write the generated files under
      // "$generatedFilesBaseDir/$sourceSet/grpcjava"
      outputSubDir = 'grpcjava'
    }
  }
}

默认配置指定了生成文件的默认位置。按我们需求修改好之后,重新执行gradle clean generateProto会看到自动生成的文件到我们想要的目录了。

参考:

https://github.com/google/protobuf-gradle-plugin
https://stackoverflow.com/questions/32820728/simple-protobuf-compilation-with-gradle

展开阅读全文

没有更多推荐了,返回首页