Чтобы иметь возможность генерировать классы из .proto-файлов, в моей системе должен быть установлен protoc .Затем я могу поручить протоколу вручную скомпилировать мои .proto-файлы.Тогда я мог бы получить идею использовать нашу систему сборки для этого, например, есть плагин maven, который выполняет свою работу довольно хорошо, я бы добавил его так:
<plugin>
<groupId>org.xolstice.maven.plugins</groupId>
<artifactId>protobuf-maven-plugin</artifactId>
<version>0.5.1</version>
<executions>
<execution>
<goals>
<goal>compile</goal>
<goal>test-compile</goal>
</goals>
<configuration>
<protocExecutable>protoc</protocExecutable>
</configuration>
</execution>
</executions>
</plugin>
Так что каждый раз, когда явызвать сборку, плагин генерирует мои классы.Все хорошо и хорошо.Но если мы посмотрим на плагин, все еще трудно установить проток в системе, вызывающей сборку: <protocExecutable>protoc</protocExecutable>
.
Вопрос теперь
Чтобы это "заработало", все наши разработчики, системы сборки ... должны иметь одинаковую версию буферов протокола в своей системе, иначе сгенерированный код может измениться (или даже сломаться),Это также означает, что по мере старения кода мы не сможем собрать его на всех наших системах сборки, так как установленная версия protoc будет более новой (хорошо, я думаю, вы могли бы поспорить, чтобы установить один protoc для каждой версии и вызвать его, например, protocv3
), что потребует дополнительного обслуживания.
Есть ли что-то для протока, как это делает система сборки gradle со своими gradlew
, так что в основном это скрипт, который будет пытаться установить конкретный проток в системе, которая выполняет сборку до вызова компилятора?Таким образом, мы сохраняем этот «protow» в нашей VCS с исходным кодом, так же, как вы это делаете с gradlew.Всегда используете «правильную» версию протокола для текущего проекта?