Я пытаюсь написать собственный генератор кода для собственного фирменного языка программирования. Я решил, что могу написать генератор на Java, используя путеводитель плагина protoc. Мой главный() делает что-то вроде этого:Как написать пользовательский Protobuf CodeGenerator в Java
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);
}
(Очевидно, я только начал, хотел получить что-то Stubby работает, прежде чем на самом деле написания логики поколения)
Проблема заключается в: Как вызвать protoc с аргументом --plugin для генерации кода на моем пользовательском языке, используя мой плагин? Я пытался писать скрипт, чтобы сделать это следующим образом:
#!/bin/bash
java -cp ./codegen.jar CodeGeneratorMain "[email protected]"
И я пытался ссылаться protoc как это: protoc --plugin=protoc-gen-code --code_out=./build hello.proto
однако, когда я бегу, я получаю эту ошибку:
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.
Как будто это не передавая CodeGeneratorRequest на stdin вообще. Как я могу это проверить? Я делаю что-то явно неправильно?
Потенциально немного OT: если вы просто хотите генерировать код Java, возможно, стоит посмотреть на https://github.com/square/javapoet –
Я не хочу генерировать классы Java. ProtoBufs уже может генерировать источник Java. Это Java-плагин для генерации кода, отличного от Java. – FreeMemory