在IntelliJ中使用gRPC框架

要将gRPC整合进IntelliJ中,需要
1. 建立gradle工程;
2. 在gradle中加入gRPC和protobuf插件;
3. 在build.gradle中使用idea插件告知IntelliJ被gRPC插件生成的Java代码目录。

加入插件

建立gradle工程略去不表。

在gradle中,加入插件有两种方式。第一种方式是使用apply:

第二种是使用DSL:

需要注意的是,在使用第二种方法,即DSL时,需要将buildscript块和plugins块写在最前面,而group、version和其他的定义都要写在plugins块的后面。

为了加入gRPC插件,还需要在buildscript中加入相关的依赖:

配置protobuf插件

protoc块中,要指定的是protobuf的编译器路径。这个路径可以是本地的一个路径,也可以是插件源中的一个模板。

在generateProtoTasks中,如果需要编译到其他的语言,那就要做出相应的设定:

最后,一定要设定的是 generatedFilesBaseDir这个变量。这个变量保存的是生成的代码的目录。一般来说,就把它设定为:

这样,生成的protobuf代码就放在
$projectDir/src/generated/main/java/path/to/package/
而gPRC的代码就放在
$projectDir/src/generated/main/grpc/path/to/package/

配置idea插件

代码生成出来了,接下来要告诉IDE我生成的代码在哪里,才能让它实现自动补全之类的功能:

这个配置可以让IntelliJ检测到在对应的目录中有被生成出的代码,从而实现自动补全等一系列功能。
https://docs.gradle.org/current/dsl/org.gradle.plugins.ide.idea.model.IdeaModule.html

其他的知识

最初看到一些路径中有连着的两个星号,不知道是什么意思。后来查了一下才知道可以用来表示目录下所有目录及其子目录中的文件的意思。

  • An asterisk (‘*’) matches zero or more characters, up to the occurrence of a ‘/’ character (which serves as a path separator). A string, such as “/abcd/docs/index.html”, would not match successfully against the pattern ‘/*/*.index.html’. The first asterisk matches up to the first path separator only, resulting in the “abcd” string. A successful matching pattern would be ‘/*/*/*.html’.

  • A string containing two asterisks (‘**’) matches zero or more characters. This could include the path separator ‘/’. In this case, “/abcd/docs/index.html” would successfully match the ‘/**/*.html’ pattern. The double asterisk, including the path separator, would match the “abcd/docs” string.

CC BY-NC-SA 4.0 在IntelliJ中使用gRPC框架 by James & Alice is licensed under a Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International License.

发表评论

电子邮件地址不会被公开。 必填项已用*标注

To create code blocks or other preformatted text, indent by four spaces:

    This will be displayed in a monospaced font. The first four 
    spaces will be stripped off, but all other whitespace
    will be preserved.
    
    Markdown is turned off in code blocks:
     [This is not a link](http://example.com)

To create not a block, but an inline code span, use backticks:

Here is some inline `code`.

For more help see http://daringfireball.net/projects/markdown/syntax

此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据