protoc java out_protoc 命令参数
protoc 命令的获得
源码在 https://github.com/google/protobuf , 如果不想自己编译获得最新版本,则可以下载官方编译好的各个平台的,下载地址:https://github.com/google/protobuf/releases ,注意不是带语言后缀的文件,那是源码,如下图:
下载后的解压缩包含的内容如下(以mac下为例)
命令参数
$ protoc -help
Usage: protoc [OPTION] PROTO_FILES
Parse PROTO_FILES and generate output based on the options given:
-IPATH, --proto_path=PATH Specify the directory in which to search for
imports. May be specified multiple times;
directories will be searched in order. If not
given, the current working directory is used.
--version Show version info and exit.
-h, --help Show this text and exit.
--encode=MESSAGE_TYPE Read a text-format message of the given type
from standard input and write it in binary
to standard output. The message type must
be defined in PROTO_FILES or their imports.
--decode=MESSAGE_TYPE Read a binary message of the given type from
standard input and write it in text format
to standard output. The message type must
be defined in PROTO_FILES or their imports.
--decode_raw Read an arbitrary protocol message from
standard input and write the raw tag/value
pairs in text format to standard output. No
PROTO_FILES should be given when using this
flag.
-oFILE, Writes a FileDescriptorSet (a protocol buffer,
--descriptor_set_out=FILE defined in descriptor.proto) containing all of
the input files to FILE.
--include_imports When using --descriptor_set_out, also include
all dependencies of the input files in the
set, so that the set is self-contained.
--include_source_info When using --descriptor_set_out, do not strip
SourceCodeInfo from the FileDescriptorProto.
This results in vastly larger descriptors that
include information about the original
location of each decl in the source file as
well as surrounding comments.
--dependency_out=FILE Write a dependency output file in the format
expected by make. This writes the transitive
set of input file paths to FILE
--error_format=FORMAT Set the format in which to print errors.
FORMAT may be 'gcc' (the default) or 'msvs'
(Microsoft Visual Studio format).
--print_free_field_numbers Print the free field numbers of the messages
defined in the given proto files. Groups share
the same field number space with the parent
message. Extension ranges are counted as
occupied fields numbers.
--plugin=EXECUTABLE Specifies a plugin executable to use.
Normally, protoc searches the PATH for
plugins, but you may specify additional
executables not in the path using this flag.
Additionally, EXECUTABLE may be of the form
NAME=PATH, in which case the given plugin name
is mapped to the given executable even if
the executable's own name differs.
--cpp_out=OUT_DIR Generate C++ header and source.
--csharp_out=OUT_DIR Generate C# source file.
--java_out=OUT_DIR Generate Java source file.
--javanano_out=OUT_DIR Generate Java Nano source file.
--js_out=OUT_DIR Generate JavaScript source.
--objc_out=OUT_DIR Generate Objective C header and source.
--python_out=OUT_DIR Generate Python source file.
--ruby_out=OUT_DIR Generate Ruby source file.
例子
Java 文件生成
$ protoc --java_out=./java/ ./proto/helloworld.proto
protoc 的命令格式为 protoc [OPTION] PROTO_FILES (最后是待编译的 proto文件)
--java_out 为输出java代码的目录,这里指定的是 ./java/ 目录。
随后我们指定了proto文件的位置 ./proto/helloworld.proto 。
执行上述命令,我们就 ./java/ 目录下就产生了对应的 java文件。
go 文件生成
下面这几种方式生成都可以:
$ protoc --go_out=./go/ ./proto/helloworld.proto
跟上面Java的生成完全一样,只不过这次是让生成 go 的代码。
$ protoc --go_out=./go/ -I proto ./proto/helloworld.proto
这次多了一个参数 -I , -I=IMPORT_PATH can be used as a short form of --proto_path.
-IPATH, --proto_path=PATH Specify the directory in which to search for imports. May be specified multiple times; directories will be searched in order. If not given, the current working directory is used.
IMPORT_PATH specifies a directory in which to look for .proto files when resolving import directives. If omitted, the current directory is used. Multiple import directories can be specified by passing the --proto_path option multiple times; they will be searched in order.
简单来说,就是如果多个proto文件之间有互相依赖,生成某个proto文件时,需要import其他几个proto文件,这时候就要用-I来指定搜索目录。
如果没有指定 –I 参数,则在当前目录进行搜索。
上面两种方法产生的目录如下图, –I 参数起作用了后,生成目录少了一级:
javanano 文件生成
$ protoc --javanano_out=ignore_services=true:./javanano/ -I proto ./proto/garlic.proto
由于 javanano 是给 android 用的,没有服务器端代码,所以多了--javanano_out=ignore_services=true:DST_DIR 这个设置,其他完全一样。
参考: https://github.com/grpc/grpc-common/issues/156
更复杂的可以参考:
Android protobuf nano documentation
http://stackoverflow.com/questions/22247951/android-protobuf-nano-documentation
https://developers.google.com/protocol-buffers/docs/proto3#generating
为了更方便的使用gRPC,包括protoc的命令,针对不同语言有下面额外的方法:
http://www.grpc.io/posts/installation
Language
Platform
Command
Node.js
Linux, Mac, Windows
npm install grpc
Python
Linux, Mac, Windows
pip install grpcio
Ruby
Linux, Mac, Windows
gem install grpc
PHP
Linux, Mac, Windows
pecl install grpc-beta
Go
Linux, Mac, Windows
go get google.golang.org/grpc
Objective-C
Mac
Runtime source fetched automatically from Github by Cocoapods
C#
Windows
Install gRPC NuGet package from your IDE (Visual Studio, Monodevelop, Xamarin Studio)
Java
Linux, Mac, Windows
Use our Maven and Gradle plugins that provide gRPC with statically linked boringssl
C++
Linux, Mac, Windows
Currently requires manual build and install
参考资料:
https://github.com/google/protobuf/tree/master/javanano
https://github.com/google/protobuf
protoc java out_protoc 命令参数相关推荐
- java -jar命令参数的单横杠-和双横杠--用法
java -jar命令参数的单横杠-和双横杠–用法 如下是一条典型的jar包启动参数,相信很多人都有用过: java -jar -Xms4096M xxx.jar --server.port=8088 ...
- protoc支持c_protoc 命令参数
protoc 命令的获得 下载后的解压缩包含的内容如下(以mac下为例) 我们通过 which 命令可以查到 protoc 的安装目录, 覆盖它即可. $ which protoc /usr/loca ...
- protoc 命令参数
protoc 命令的获得 源码在 https://github.com/google/protobuf , 如果不想自己编译获得最新版本,则可以下载官方编译好的各个平台的,下载地址:https://g ...
- 【Java 虚拟机原理】垃圾回收算法 ( 设置 JVM 命令参数输出 GC 日志 | GC 日志输出示例 | GC 日志分析 )
文章目录 一.设置 JVM 命令参数输出 GC 日志 二.GC 日志示例 三.GC 日志分析 一.设置 JVM 命令参数输出 GC 日志 在 IntelliJ IDEA 的启动参数中设置 -XX:+P ...
- java编译命令带参数_java编译命令基础知识点
我们在对计算机下达指令时,人类的语言它是不能够明白,需要通过编译的时候翻译成计算机能听懂的语言.编译过程中会调用javac命令,这点大家可能接触的不多,毕竟是是计算机程序内部运行时的操作.下面我们就编 ...
- OpenJDK源码赏析之三:Java命令参数的读取处理流程
承接上一篇 OpenJDK源码赏析之二:java虚拟机启动流程到首函数调用全流程_星空_AZ的博客-CSDN博客 这篇这要解析Java虚拟机创建时候配置读取时候命令行参数的读取过程,这次采取逆向思维分 ...
- java ext.dirs_关于-Djava.ext.dirs使用及JAVA 命令参数详解System.setProperty
大家在linux环境下使用命令行执行java程序时,经常要使用到大量外部的jar包或class文件,一般我们有哪些方式可以用呢? -classpath,命令格式:# java -classpath , ...
- 介绍Java -D 命令行参数
介绍Java -D 命令行参数 我们在ide中执行程序经常需要设置VM参数,运行maven命令也需要设置参数,都是通过-D设置参数值.本文带你了解-D命令行参数. 1. 什么是Java -D命令行参数 ...
- linux卸载java rpm_Linux中查看jdk安装目录、Linux卸载jdk、rpm命令、rm命令参数
一.查看jdk安装目录 [root@node001 ~]# whereis java java: /usr/bin/java /usr/local/java #java执行路径 [root@node0 ...
- linux卸载java rpm_Linux卸载jdk、rpm命令、rm命令参数方法
本文主要和大家Linux中查看jdk安装目录.Linux卸载jdk.rpm命令.rm命令参数 的相关资料,需要的朋友可以参考下,希望能帮助到大家. 一.查看jdk安装目录 [root@node001 ...
最新文章
- find_in_set
- PostgreSQL在何处处理 sql查询之三十九
- 转载:有关SQL server connection Keep Alive 的FAQ(3)
- kafka可视化客户端工具(Kafka Tool)的基本使用
- java中自定义表单和流程_让驰骋工作流程引擎 ccbpm使用自定义表单来实现自己的业务逻辑....
- NLP基础 : HMM 隐马尔可夫模型
- 开关灯(信息学奥赛一本通-T1109)
- Linux 文件描述符的概念及与文件流指针的关系
- android新手上路 一
- 电脑怎么打出冒号符号_冒号的用法有哪些?写作文的时候冒号怎么用?冒号在电脑上怎么打出来?...
- 搭建一个vue小页面
- web常用模块测试用例
- 前窗玻璃膜贴了一周还有气泡_新车前挡风玻璃贴膜后有气泡几天能下去
- 调和曲线图和轮廓图的比较
- 零基础如何学习自动化测试
- 百度快速收录技巧总结
- ABAP 快速找到第二代增强的方法(基于函数出口增强function)
- 新玩意 扩展主机省钱又方便赛过无盘(转)
- 扩展欧几里得算法求逆元---乘法密码
- motorola铃声算法,是Java的!(转)