首先下载**protoc-gen-grpc-kotlin-1.5.0-jdk8.jar包,下载地址如下:**
https://repo1.maven.org/maven2/io/grpc/protoc-gen-grpc-kotlinhttps://repo1.maven.org/maven2/io/grpc/
有了protoc-gen-grpc-kotlin-1.5.0-jdk8.jar后 ,我们只需要写一个简单的"外壳"脚本,让 protoc 能够通过 Java 运行这个 JAR 包。
请按照以下 4 个步骤操作:
- 将 JAR 包移动到固定目录
为了防止误删,建议把它从"下载"文件夹移动到配置目录:
bash
mkdir -p /home/ubt/.local/bin
mv ~/下载/protoc-gen-grpc-kotlin-1.5.0-jdk8.jar /home/ubt/.local/bin/
- 创建启动脚本
我们需要创建一个名为 protoc-gen-grpc-kotlin(不带 .jar 后缀)的可执行文件:
cpp
nano /home/ubt/.local/bin/protoc-gen-grpc-kotlin
- 在编辑器中粘贴以下内容
直接复制这两行(这会自动把 protoc 传给插件的所有参数转发给 Java):
bash
#!/bin/bash
java -jar /home/ubt/.local/bin/protoc-gen-grpc-kotlin-1.5.0-jdk8.jar "$@"
按 Ctrl + O 保存,Ctrl + X 退出。
- 赋予执行权限
bash
chmod +x /home/ubt/.local/bin/protoc-gen-grpc-kotlin
验证并构建
现在运行验证命令,如果看到类似 Missing input file 或参数错误的提示(只要不是 command not found 或 <html>),就说明配置成功了:
bash
/home/ubt/.local/bin/protoc-gen-grpc-kotlin --version
/home/ubt/.local/bin/protoc-gen-grpc-kotlin --version
Exception in thread "main" java.nio.file.NoSuchFileException: --version
at java.base/sun.nio.fs.UnixException.translateToIOException(UnixException.java:92)
at java.base/sun.nio.fs.UnixException.rethrowAsIOException(UnixException.java:106)
at java.base/sun.nio.fs.UnixException.rethrowAsIOException(UnixException.java:111)
at java.base/sun.nio.fs.UnixFileSystemProvider.newByteChannel(UnixFileSystemProvider.java:218)
at java.base/java.nio.file.Files.newByteChannel(Files.java:380)
at java.base/java.nio.file.Files.newByteChannel(Files.java:432)
at java.base/java.nio.file.spi.FileSystemProvider.newInputStream(FileSystemProvider.java:422)
at java.base/java.nio.file.Files.newInputStream(Files.java:160)
at io.grpc.kotlin.generator.protoc.AbstractGeneratorRunner.readFileDescriptorSet(AbstractGeneratorRunner.kt:96)
at io.grpc.kotlin.generator.protoc.AbstractGeneratorRunner.mainAsCommandLine(AbstractGeneratorRunner.kt:70)
at io.grpc.kotlin.generator.protoc.AbstractGeneratorRunner.doMain(AbstractGeneratorRunner.kt:91)
at io.grpc.kotlin.generator.GeneratorRunner.main(GeneratorRunner.kt:27)
恭喜,这个报错(
java.nio.file.NoSuchFileException: --version)其实是一个非常好的信号!
这证明了以下几点:
- 你的 Java 环境 正常工作。
- 你的 启动脚本 (
/home/ubt/.local/bin/protoc-gen-grpc-kotlin) 成功调用了 JAR 包。 - 插件已经生效 :它报错是因为它正试图把
--version当作一个.proto定义文件去解析,而它找不到这个文件。
为什么会这样?
protoc-gen-grpc-kotlin 插件是一个内部编译器插件 ,它设计上不是为了在终端独立运行的,而是由 protoc 自动调用的。它不识别 --version 参数,所以报了 NoSuchFileException。