5

社内独自のプログラミング言語用のカスタム コード ジェネレーターを作成しようとしています。protoc プラグイン ガイドを使用して、Java でジェネレーターを作成できると考えました。私の main() は次のようなことをします:

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 "$@"

そして、次のようにprotocを呼び出してみました:protoc --plugin=protoc-gen-code --code_out=./build hello.protoしかし、それを実行すると、次のエラーが発生します:

スレッド「メイン」での例外 java.lang.ArrayIndexOutOfBoundsException: 0 at CodeGeneratorMain.main(CodeGeneratorMain.java:12) --code_out: protoc-gen-code: プラグインがステータス コード 1 で失敗しました。

stdin で CodeGeneratorRequest をまったく渡していないかのように。どうすればそれを確認できますか?私は明らかに間違ったことをしていますか?

4

1 に答える 1