今天研究使用protobuf弄了几个小时,从来没接触过的东西,想要的效果也很简单,就想写个demo然后用protobuf编译生成java然后在研究自己的项目,没想到运行起来demo就几个小时.全是在网上一点点查的,真想说句cnmlgb.写教程的看十篇八篇是复制的,我就在想你tmd验证了吗????是不是正确的就写出来???看都不看自己都不验证,command+c+v有什么用???等你用的时候发现根本就nmd行不通.......
吐槽了一通:复制也好原创也好,写明白点.或者自己验证一遍可行再发出来,利人利己.
以下是我几个小时成果,亲测,亲测可行:mac protobuf java
./configure --prefix=/Users/mr.chen/protobuf
/Users/mr.chen/protobuf 为自己设定的编译安装目录
make(这步之前找的各种奇葩教程指导我安装了两个东西我也不知道有没有作用.贴出来,如果不需要就跳过,命令 brew install automake和brew install libtool;brew是包管理器安装包管理器就一句话
/usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"官方地址点击打开链接
)make install
配置环境变量(我使用的是zsh;使用bash的应该是配置在.bash_profile中)打开.zshrc文件加入下面配置(文件是隐藏的,不会用vim配置就打开文件去配置了,显示隐藏文件命令defaults write com.apple.finder AppleShowAllFiles -bool true不显示就改为false--需要重启finder生效.重启finder是command+option+esc)
验证protoc --version显示libprotoc 2.6.1 就说明成功了
接下来就是最坑的了.怎么跑起来demo其实很简单
写一个protobuf文件可以复制我这个直接跑下.文件名protobuf.proto(文件名随意,后缀要是.proto)
option java_package = "safe.mrchen.com.someknowledge";
option java_outer_classname = "PersonPb";
message Person {
required string name = 1;
required int32 id = 2;
optional string email = 3;
enum PhoneType {
MOBILE = 0;
HOME = 1;
WORKE = 2;
}
message PhoneNumber {
required string number = 1;
optional PhoneType type = 2 [default = HOME];
}
repeated PhoneNumber phone = 4;
message CountryInfo {
required string name = 1;
required string code = 2;
optional int32 number = 3;
}
}
message AddressBook {
repeated Person person = 1;
}
然后进入protobuf-2.6.1文件夹中的examples文件夹中执行命令(网上查的命令真是千奇百怪.也不知道他们验证了没有)
protoc ./protobuf.proto --java_out=./
在同级目录下你就会看见生成的文件夹了,里面就有想要的java文件