Protocol buffers 包装和运送protoc,因此我们的构建环境不需要预先安装protoc

Protocol buffers 包装和运送protoc,因此我们的构建环境不需要预先安装protoc,protocol-buffers,protoc,protobuf-java,Protocol Buffers,Protoc,Protobuf Java,为了能够从.proto文件生成类,我必须在系统上安装protoc。然后我可以手动指示protoc编译我的.proto文件。然后我可能会想到利用我们的构建系统来实现这一点,例如,有一个maven插件可以很好地完成这项工作,我会这样添加它: <plugin> <groupId>org.xolstice.maven.plugins</groupId> <artifactId>protobuf-maven-plugin</artifa

为了能够从.proto文件生成类,我必须在系统上安装protoc。然后我可以手动指示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>

org.xolstice.maven.plugins
protobuf maven插件
0.5.1
编写
测试编译
原始人
所以每次我触发一个构建,插件就会生成我的类。一切都很好。但是如果我们看一下这个插件,在调用build:
protoc
的系统上安装protoc仍然是一个困难的要求

现在的问题是

为了“让它工作”,我们所有的开发人员,构建系统。。。必须在其系统上具有完全相同的协议缓冲区版本,否则生成的代码可能会发生变化(甚至中断)。这也意味着,随着代码越来越老,我们可能无法在所有构建系统上构建它,因为安装的protoc版本将更新(我猜您可能会争论为每个版本安装一个protoc,并使用例如
protocv3
)调用它,这将需要额外的维护


有没有像gradle构建系统对其
gradlew
所做的那样,在调用编译器之前尝试在运行构建的系统上安装特定协议的脚本?这样,我们就可以将“protow”和源代码一起存储在我们的VCS中,就像您对gradlew所做的一样。始终为当前项目使用“正确”的protoc版本?

值得指出的是,为protobuf生成的Java代码也绑定到特定的protobuf Java JAR版本,二进制protoc版本也必须与之匹配。所以在你的流程设计中考虑这个问题。 如果您可以使用Docker,您可以使用/执行以下操作:

这解决了一致版本问题、本地开发、分支等问题。您可以轻松地推出自己的工具版本,以满足您的需要

如果这不是一个选项,您可以考虑通过构建系统发布原型BuffFIs。这解决了您的一致性问题,但对本地开发人员和分支来说是一个挑战。这是非常令人不满的,但却是一条万不得已的道路