Я пытаюсь написать собственный генератор кода для внутреннего проприетарного языка программирования. Я решил, что могу написать генератор на Java, используя руководство по подключаемым модулям protoc. Мой 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);
}
(Очевидно, я только начал; хотел сначала получить что-то коротенькое, прежде чем писать логику генерации)
Проблема в том, как мне вызвать protoc с аргументом --plugin для генерации кода на моем собственном языке, используя мой плагин? Я попытался написать сценарий оболочки, чтобы сделать это следующим образом:
#!/bin/bash
java -cp ./codegen.jar CodeGeneratorMain "$@"
И я попытался вызвать протокол следующим образом: protoc --plugin=protoc-gen-code --code_out=./build hello.proto
однако, когда я запускаю это, я получаю эту ошибку:
Исключение в потоке "main" java.lang.ArrayIndexOutOfBoundsException: 0 в CodeGeneratorMain.main(CodeGeneratorMain.java:12) --code_out: protoc-gen-code: сбой плагина с кодом состояния 1.
Как будто он вообще не передает CodeGeneratorRequest на стандартный ввод. Как мне это проверить? Я делаю что-то явно не так?