web-dev-qa-db-ja.com

単一のコマンドで複数のprotoファイルをコンパイルする方法は?

単一のディレクトリ内に2つのprotoファイルがあり、それらのファイルから単一のコマンドでクラスを生成する方法を探しています。 Protobufのドキュメントには、--proto_pathこのための引数。

C:\shekhar\proto_trial>dir
 Volume in drive C is C

 Directory of C:\shekhar\proto_trial

07/25/2014  12:16 PM    <DIR>          .
07/25/2014  12:16 PM    <DIR>          ..
07/25/2014  12:16 PM    <DIR>          Java_op
07/25/2014  12:16 PM               230 map.proto
07/23/2014  04:24 PM               161 message.proto
07/25/2014  12:17 PM             1,228 response.proto
               3 File(s)          1,619 bytes
               3 Dir(s)  50,259,398,656 bytes free

--proto_path引数は以下のとおり

C:\shekhar\proto_trial>protoc 
                       --proto_path=C:\shekhar\proto_trial 
                       --Java_out=C:\shekhar\proto_trial\Java_op 
                       *.proto

しかし、私は次のエラーを得ています

message.proto: File does not reside within any path specified using --proto_path (or -I). 
You must specify a --proto_path which encompasses this file. 
Note that the proto_path must be an exact prefix of the .proto file names -- protoc is too dumb to figure out when two paths (e.g. absolute and relative) are equivalent (it's harder than you think).

すべてのprotoファイルを1つのショットでまとめてコンパイルする方法をいくつか提案してください。

11
Shekhar

問題は、--proto_pathを絶対パスとして指定しているのに、プロトファイルを相対パスとして指定していることです。 --proto_path引数を削除するか(デフォルトで現在のディレクトリに設定されています)、または次のいずれかを行うことができます。

protoc --proto_path=C:\shekhar\proto_trial
       --Java_out=C:\shekhar\proto_trial\Java_op
       C:\shekhar\proto_trial\*.proto
17
Kenton Varda

検索を使用するオプションは次のとおりです

protoc --js_out=js \
        -Iproto/ \
        $(find proto/google -iname "*.proto")
3
Cosmin Lehene

Protobufのコマンド> = 3.5

Windowsの通常のコマンドはProtobuf <= 3.4でのみ機能し、新しいバージョンではワイルドカード*を使用できないようですが、すべてのファイル名を個別に入力する必要があります。幸いなことに、相対ディレクトリを使用して、forループ( here から)を使用するのは簡単です。

for /f %i in ('dir /b proto_trial\*.proto') do protoc proto_trial\%i --Java_out=proto_trial\Java_op

または、 ここ から、ワイルドカードを適切に展開できるため、Git Bashがインストールされている場合はそれを使用して、以前と同じようにコマンドを使用することもできます。

protoc proto_trial\*.proto --Java_out=proto_trial\Java_op
3
PHPirate

このリンクからコンパイラのWindowsバージョンをダウンロードしてください https://github.com/google/protobuf/releases/tag/v3.3.

ダウンロードしたアプリケーションのbinフォルダからコマンドプロンプトを起動します。 potocコマンドを使用してクラスを生成します。

    protoc --proto_path=<Directory name where your proto file is residing> 
           --Java_out=<Directory name where you want your output classes to get generated> 
           <absolute path of your protofile with extention>

複数のプロトファイルにワイルド文字*を使用する

1
Sandeep

見つける。 -name "* .proto" | xargs -I {} protoc "{}"

0
hetal

最も簡単な方法:

protoc C:\shekhar\proto_trial\*.proto --Java_out=C:\shekhar\proto_trial\Java_op
0