2017-01-02 7 views
2

私は独自のプログラミング言語用のカスタムコードジェネレータを作成しようとしています。私はprotocプラグインガイドを使ってJavaでジェネレータを書くことができると考えました。どのように私は起動操作を行います。JavaでカスタムProtobuf CodeGeneratorを書く方法

問題がある(実際に生成ロジックを書き込む前に、最初の作業何かずんぐりを取得したいもちろん私はちょうど開始しましたが)

public static void main(String[] args) throws IOException { 
    CodeGenerator gen = new CodeGenerator(); 
    PluginProtos.CodeGeneratorRequest codeGeneratorRequest = PluginProtos.CodeGeneratorRequest.parseFrom(args[0].getBytes()); 
    codeGeneratorRequest.getProtoFileList().forEach(gen::handleFile); 
    // get the response and do something with it 
    //PluginProtos.CodeGeneratorResponse response = PluginProtos.CodeGeneratorResponse.newBuilder().build(); 
    //response.writeTo(System.out); 
} 

:)(私のメインは、このような何かを行います私のカスタム言語でプラグインを使用してコードを生成するには、--plugin引数でprotocを使用しますか?私はこのようにそれを行うには、シェルスクリプトを書いてみました:

#!/bin/bash 
java -cp ./codegen.jar CodeGeneratorMain "[email protected]" 

そして、私はこのようなprotoc起動しようとした:それはだかのように

Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 0 at CodeGeneratorMain.main(CodeGeneratorMain.java:12) --code_out: protoc-gen-code: Plugin failed with status code 1.

:私は、私はこのエラーを取得することを実行すると、しかし、protoc --plugin=protoc-gen-code --code_out=./build hello.proto CodeGeneratorRequestをstdinに一切渡しません。それをどのように確認するのですか?明らかに間違ったことをしていますか?読んで私は非常に愚かなエラーを実現ドキュメントを再読み込みした後ので

+0

潜在的に少しOT:Javaコード生成を探しているのなら、https://github.com/square/javapoetを見てみる価値があります。 –

+0

Javaクラスを生成するつもりはありません。 ProtoBufsは既にJavaソースを生成できます。これはJava以外のコードを生成するためのJavaプラグインです。 – FreeMemory

答えて

0

:protocはARGV経由標準入力ないを経由して解析された入力を渡します。つまり、私がこれを変更した場合:PluginProtos.CodeGeneratorRequest codeGeneratorRequest = PluginProtos.CodeGeneratorRequest.parseFrom(args[0].getBytes());これに:PluginProtos.CodeGeneratorRequest codeGeneratorRequest = PluginProtos.CodeGeneratorRequest.parseFrom(System.in);

それは動作します。

関連する問題