go krotos proto编译引用外部包 was not found or had errors
前言
kratos protos 生成 pb.go 文件时,会出现引用其他 proto 文件报错 was not found or had errors,因找不到此文件而无法编译。
解决
首先我们先了解下 protoc 中 import 的两条规则:
- import 不允许使用相对路径;
- import 导入路径应该从根开始的绝对路径
这个根开始的绝对路径指的是 $GOPATH/src 开始的路径。
把对应缺失的文件下载下来,放在 $GOPATH/src 下,例如 import "google/api/annotations.proto"; 找不到
点击googleapis 到 GitHub 下载项目,或者直接点击缺失文件下载,移动到$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的更多相关文章
- javac 编译引用外部指定jar包进行编译和执行编译后的class文件
1.libs新建文件夹存放依赖所有jar包 2.cmd 执行: 2.1 javac -encoding UTF-8 -classpath .;C:\Users\chenquan\IdeaProject ...
- IDEA14下多jdk编译时,enum不支持;多个project共用在一个workplace下每个module时引用外部包
idea多个工程如何在一个项目中管理: 把多个多个项目放在一个叫work目录下,那么打开IntelliJ IDEA编译器,点击菜单 File->Open...,选择刚刚的work目录,即可. 在 ...
- 命令行编译带外部包依赖的java源文件 [以JDBC MySQL8为例]
环境: MySQL8 JDK11(SE) 首先下载MySQL8的JDBC驱动 https://dev.mysql.com/downloads/connector/j/选 PlatForm Indepe ...
- jar包双击执行引用外部包问题
大家都知道一个java应用项目可以打包成一个jar,当然你必须指定一个拥有main函数的main class作为你这个jar包的程序入口. 具体的方法是修改jar包内目录META-INF下的MANIF ...
- java 编译 运行 及 引用外部 jar 包的方法
1. 环境变量配置 JAVA_HOMEC:\Program Files\Java\jdk1.8.0_121; PATH%PATH%;C:\Java\jdk1.6.0_30\bin; CLASSPATH ...
- 利用命令行引用外部jar包以使程序正常执行的4种方法
声明:本博客为原创博客.未经同意.不得转载!原文链接为http://blog.csdn.net/bettarwang/article/details/30976069 平时写一些小的Java Demo ...
- 手动编译含package的java源程序(包含外部包中定义的类)
1)定义一个GSM类,如下: 包名是“SRC.GSM”,并且此程序引用了外部jar包.使用javac命令对GSM.java进行编译: GSM.java所在的文件夹如下所示: 切换到这个目录为当前工作目 ...
- Code-Review-Maven编译(第三方jar包引用)
Code-Review-SpringBoot-Maven编译(第三方jar包引用) 在使用maven编译项目时,有时候咱们可能会使用一些第三方的jar包依赖库,比如第三方支付类的接入,大多出于安全考虑 ...
- maven工程引用外部jar包
maven工程经常回遇到引用外部jar包,需要先安装在jar包,然后再在工程中pom.xml文件中添加依赖. 示例: 命令行中运行: mvn install:install-file -Dfile=E ...
- 有引用外部jar包时(J2SE)生成jar文件
一.工程没有引用外部jar包时(J2SE) 选中工程---->右键,Export...--->Java--->选择JAR file--->next-->选择jar fil ...
随机推荐
- Qt通用方法及类库8
函数名 //异或加密算法 static QString getXorEncryptDecrypt(const QString &str, char key); //异或校验 static uc ...
- Python中的包、模块和源码的组织关系
- 哔哩哔哩从0到1自研智能客服IM系统的技术实践之路
本文由B端技术中心分享,原题"从0到1:哔哩哔哩智能客服系统的设计与实现",本文有修订和改动. 1.引言 本文将要分享的是哔哩哔哩从0到1自研智能客服IM系统的技术实践过程,包括整 ...
- ABP 系列总结
2019年第一次接触 ABP 框架,那时候还是比较笨重的旧版本的,后来升级到 vNext 版本,我也基于 ABP 模块化的设计方式开发了一些模块用于日常工作.这个系列主要为了系统地记录一下日常工作与学 ...
- 一致性hash和普通hash和hash槽
普通hash Hash函数:一般翻译做散列.杂凑,或音译为哈希,是把任意长度的输入(又叫做预映射pre-image)通过散列算法变换成固定长度的输出,该输出就是散列值.碰撞(冲突):如果两个关键字通过 ...
- 推荐几个不错的 Linux 服务器管理工具
前言 选择一款好的 Linux 服务器管理工具能够极大地提高运维效率,保障业务连续性.今天大姚给大家分享3款不错的 Linux 服务器管理工具,希望可以帮助到有需要的同学. 1Panel 1Panel ...
- Vmware共享文件夹安装设置方法(window与Linux使用共享文件夹)
Vmware共享文件夹安装设置方法 注意:如果按照了工具,设置了共享文件夹,Linux下面还是没有的话,可以运行下面的命令,就会加载共享文件夹了 vmhgfs-fuse .host:/ /mnt/hg ...
- 安全可信 | 首批!天翼云边缘安全加速平台AccessOne通过信通院“软件自研创新能力”专项评估
近日,中国信息通信研究院(以下简称"中国信通院")公布"软件自研创新能力"专项评估(简称"可信研创")结果,天翼云边缘安全加速平台Acces ...
- jar包启停shell脚本
jar包控制脚本1 #!/bin/bash export JAVA_HOME=/u01/java_home/jdk1.8.0_181 export APP_HOME=/u01/test export ...
- Luogu P11553 ROIR 2016 Day 1 奇怪的字符串 题解 [ 绿 ] [ 后缀自动机 ] [ 枚举 ] [ 观察 ]
奇怪的字符串:需要一点观察的 SAM 小清新题. 观察 我们首先观察什么样的字符串才是奇怪的,可以发现,首先类似 AAAAAAA 之类全部相等的字符串是奇怪的. 继续观察,如果字符种类变为两种或者三种 ...