前言

kratos protos 生成 pb.go 文件时,会出现引用其他 proto 文件报错 was not found or had errors,因找不到此文件而无法编译。

解决

首先我们先了解下 protoc 中 import 的两条规则:

  1. import 不允许使用相对路径;
  2. import 导入路径应该从根开始的绝对路径

这个根开始的绝对路径指的是 $GOPATH/src 开始的路径。

把对应缺失的文件下载下来,放在 $GOPATH/src 下,例如 import "google/api/annotations.proto"; 找不到

点击googleapisGitHub 下载项目,或者直接点击缺失文件下载,移动到$GOPATH/src 下,此时完整路径应该就是:

$GOPATH/src/google/api/annotations.proto

注意:使用 krotos项目,缺失的 proto 文件,需用户自行编写或下载,存放在 krotos 项目的 third_party 目录(框架定义的第三方 proto 存放路径)

protoc 路径问题

protoc 有一个参数 -I,表示引入文件的目录路径,如果没有指定 -I 参数,则在当前目录进行搜索。

例如这里的 import "google/api/annotations.proto";,这里的这个路径,其实是从 $GOPATH/src 开始的路径。

也就是说,首先要用 -I 参数将引入包的路径设置到 $GOPATH/src 目录下,即

protoc -I ../

完整命令:

protoc -I ../ -I ./ --go_out=plugins=grpc:. ./test.proto

每个 -I 参数都引入一个目录,再加上待编译的 proto 也需要引入,所以上面这里就用了两个 -I 来引入目录文件。

推荐使用 $GOPATH/src 的方式来引入,简单直观不容易出错:

protoc -I ./ \
-I $GOPATH/src \
-I $GOPATH/src/google/api \
--go_out=plugins=grpc:. ./xxx.proto

import自定义proto的红色提示

goland进行以下操作:

File 》 Settings 》Languages & Frameworks 》 Protobuf,添加 proto 文件目录,Apply 》OK

go krotos proto编译引用外部包 was not found or had errors的更多相关文章

  1. javac 编译引用外部指定jar包进行编译和执行编译后的class文件

    1.libs新建文件夹存放依赖所有jar包 2.cmd 执行: 2.1 javac -encoding UTF-8 -classpath .;C:\Users\chenquan\IdeaProject ...

  2. IDEA14下多jdk编译时,enum不支持;多个project共用在一个workplace下每个module时引用外部包

    idea多个工程如何在一个项目中管理: 把多个多个项目放在一个叫work目录下,那么打开IntelliJ IDEA编译器,点击菜单 File->Open...,选择刚刚的work目录,即可. 在 ...

  3. 命令行编译带外部包依赖的java源文件 [以JDBC MySQL8为例]

    环境: MySQL8 JDK11(SE) 首先下载MySQL8的JDBC驱动 https://dev.mysql.com/downloads/connector/j/选 PlatForm Indepe ...

  4. jar包双击执行引用外部包问题

    大家都知道一个java应用项目可以打包成一个jar,当然你必须指定一个拥有main函数的main class作为你这个jar包的程序入口. 具体的方法是修改jar包内目录META-INF下的MANIF ...

  5. java 编译 运行 及 引用外部 jar 包的方法

    1. 环境变量配置 JAVA_HOMEC:\Program Files\Java\jdk1.8.0_121; PATH%PATH%;C:\Java\jdk1.6.0_30\bin; CLASSPATH ...

  6. 利用命令行引用外部jar包以使程序正常执行的4种方法

    声明:本博客为原创博客.未经同意.不得转载!原文链接为http://blog.csdn.net/bettarwang/article/details/30976069 平时写一些小的Java Demo ...

  7. 手动编译含package的java源程序(包含外部包中定义的类)

    1)定义一个GSM类,如下: 包名是“SRC.GSM”,并且此程序引用了外部jar包.使用javac命令对GSM.java进行编译: GSM.java所在的文件夹如下所示: 切换到这个目录为当前工作目 ...

  8. Code-Review-Maven编译(第三方jar包引用)

    Code-Review-SpringBoot-Maven编译(第三方jar包引用) 在使用maven编译项目时,有时候咱们可能会使用一些第三方的jar包依赖库,比如第三方支付类的接入,大多出于安全考虑 ...

  9. maven工程引用外部jar包

    maven工程经常回遇到引用外部jar包,需要先安装在jar包,然后再在工程中pom.xml文件中添加依赖. 示例: 命令行中运行: mvn install:install-file -Dfile=E ...

  10. 有引用外部jar包时(J2SE)生成jar文件

    一.工程没有引用外部jar包时(J2SE) 选中工程---->右键,Export...--->Java--->选择JAR file--->next-->选择jar fil ...

随机推荐

  1. python_Django---基础

    1.创建app 终端:python3.x manage.py startapp  app(名字) 2.路由创建 urls.py: 导入函数:from app(app名) import views 创建 ...

  2. elementPlus 问题总结

    第一次搞,遇上很多弱智问题,记录一下 安装elementPlus $ npm install element-plus --save 全局引入 import ElementPlus from 'ele ...

  3. 跟着源码学IM(十二):基于Netty打造一款高性能的IM即时通讯程序

    本文由竹子爱熊猫分享,原题"(十一)Netty实战篇:基于Netty框架打造一款高性能的IM即时通讯程序",本文有修订和改动. 1.引言 关于Netty网络框架的内容,前面已经讲了 ...

  4. torque提交作业

    PBS(Protable Batch System)是功能最为齐全,历史最悠久,支持最广泛的本地集群调度器之一. PBS的目前包括openPBS,PBS Pro和Torque三个主要分支.其中Open ...

  5. Linux 检查磁盘空间命令合集

    1. DF df 是检查Linux安装程序上可用分区空间的最常用的命令之一.可以使用"df -TH"以直观易读的格式打印分区类型和分区大小.此命令将显示每个部分的总可用空间.已用空 ...

  6. 单点登录-SSO原理

    为什么需要单点登录 单点登录SSO(Single Sign On)说得简单点就是在一个多系统共存的环境下,用户在一处登录后,就不用在其他系统中登录,也就是用户的一次登录能得到其他所有系统的信任. 单点 ...

  7. redis-总结列表

    基础 启动命令 redis-server kconfig/redis.conf 通过指定的配置文件启动服务(kconfig/redis.conf是复制过来的) redis-cli -p 6379 使用 ...

  8. 我的程序库:HiCSDB

    HiCSDB是我写的一个通用程序库,地址:https://github.com/xumingxsh/HiCSDB 该库的目标是简化C#的数据库交互操作. 在这个库中,我将数据库的交互操作抽象为一下几个 ...

  9. Hetemit pg walkthrough Intermediate

    nmap ┌──(root㉿kali)-[~] └─# nmap -p- -A 192.168.157.117 Starting Nmap 7.94SVN ( https://nmap.org ) a ...

  10. 金泰克S300固态硬盘 SM2256K开卡量产

    开卡原因:固态硬盘出现开机正常,用一会就找不到硬盘了,电脑冷启动后又可以识别硬盘,决定根据网上教程进行开卡量产修复试试. 硬盘型号:tigo S300 120GB,主控芯片SM2256K AB,闪存颗 ...