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 命令参数相关推荐

  1. java -jar命令参数的单横杠-和双横杠--用法

    java -jar命令参数的单横杠-和双横杠–用法 如下是一条典型的jar包启动参数,相信很多人都有用过: java -jar -Xms4096M xxx.jar --server.port=8088 ...

  2. protoc支持c_protoc 命令参数

    protoc 命令的获得 下载后的解压缩包含的内容如下(以mac下为例) 我们通过 which 命令可以查到 protoc 的安装目录, 覆盖它即可. $ which protoc /usr/loca ...

  3. protoc 命令参数

    protoc 命令的获得 源码在 https://github.com/google/protobuf , 如果不想自己编译获得最新版本,则可以下载官方编译好的各个平台的,下载地址:https://g ...

  4. 【Java 虚拟机原理】垃圾回收算法 ( 设置 JVM 命令参数输出 GC 日志 | GC 日志输出示例 | GC 日志分析 )

    文章目录 一.设置 JVM 命令参数输出 GC 日志 二.GC 日志示例 三.GC 日志分析 一.设置 JVM 命令参数输出 GC 日志 在 IntelliJ IDEA 的启动参数中设置 -XX:+P ...

  5. java编译命令带参数_java编译命令基础知识点

    我们在对计算机下达指令时,人类的语言它是不能够明白,需要通过编译的时候翻译成计算机能听懂的语言.编译过程中会调用javac命令,这点大家可能接触的不多,毕竟是是计算机程序内部运行时的操作.下面我们就编 ...

  6. OpenJDK源码赏析之三:Java命令参数的读取处理流程

    承接上一篇 OpenJDK源码赏析之二:java虚拟机启动流程到首函数调用全流程_星空_AZ的博客-CSDN博客 这篇这要解析Java虚拟机创建时候配置读取时候命令行参数的读取过程,这次采取逆向思维分 ...

  7. java ext.dirs_关于-Djava.ext.dirs使用及JAVA 命令参数详解System.setProperty

    大家在linux环境下使用命令行执行java程序时,经常要使用到大量外部的jar包或class文件,一般我们有哪些方式可以用呢? -classpath,命令格式:# java -classpath , ...

  8. 介绍Java -D 命令行参数

    介绍Java -D 命令行参数 我们在ide中执行程序经常需要设置VM参数,运行maven命令也需要设置参数,都是通过-D设置参数值.本文带你了解-D命令行参数. 1. 什么是Java -D命令行参数 ...

  9. linux卸载java rpm_Linux中查看jdk安装目录、Linux卸载jdk、rpm命令、rm命令参数

    一.查看jdk安装目录 [root@node001 ~]# whereis java java: /usr/bin/java /usr/local/java #java执行路径 [root@node0 ...

  10. linux卸载java rpm_Linux卸载jdk、rpm命令、rm命令参数方法

    本文主要和大家Linux中查看jdk安装目录.Linux卸载jdk.rpm命令.rm命令参数 的相关资料,需要的朋友可以参考下,希望能帮助到大家. 一.查看jdk安装目录 [root@node001 ...

最新文章

  1. find_in_set
  2. PostgreSQL在何处处理 sql查询之三十九
  3. 转载:有关SQL server connection Keep Alive 的FAQ(3)
  4. kafka可视化客户端工具(Kafka Tool)的基本使用
  5. java中自定义表单和流程_让驰骋工作流程引擎 ccbpm使用自定义表单来实现自己的业务逻辑....
  6. NLP基础 : HMM 隐马尔可夫模型
  7. 开关灯(信息学奥赛一本通-T1109)
  8. Linux 文件描述符的概念及与文件流指针的关系
  9. android新手上路 一
  10. 电脑怎么打出冒号符号_冒号的用法有哪些?写作文的时候冒号怎么用?冒号在电脑上怎么打出来?...
  11. 搭建一个vue小页面
  12. web常用模块测试用例
  13. 前窗玻璃膜贴了一周还有气泡_新车前挡风玻璃贴膜后有气泡几天能下去
  14. 调和曲线图和轮廓图的比较
  15. 零基础如何学习自动化测试
  16. 百度快速收录技巧总结
  17. ABAP 快速找到第二代增强的方法(基于函数出口增强function)
  18. 新玩意 扩展主机省钱又方便赛过无盘(转)
  19. 扩展欧几里得算法求逆元---乘法密码
  20. motorola铃声算法,是Java的!(转)

热门文章

  1. Adobe Creative Cloud 2022 (macOS、Windows) TNT 合集
  2. 华为手机怎么隐藏按键图标_华为手机如何隐藏桌面图标
  3. Windows中I/O完成端口机制详解
  4. python群控模拟安卓系统_安卓群控系统模拟器
  5. 教你win7免费升级到win10系统教程
  6. Linux下搭建打印机共享服务器(支持苹果AirPrint)
  7. 3COM TFTP 3CDaemon中文绿色版
  8. 小学数学四年级上册计算机教案,新人教版四年级上册数学教案
  9. 啊哈C——学习2.5一起来找茬
  10. 2017数学建模B题回顾与解题分享