我正在尝试构建一些预先存在的Java代码,其中在其传输层中包含google Protocol Buffer 。 plugin我正在使用我已包含在我的 pom 文件中的以下元素:
<plugin>
<groupId>com.github.igor-petruk.protobuf</groupId>
<artifactId>protobuf-maven-plugin</artifactId>
<version>0.6.3</version>
<executions>
<execution>
<goals>
<goal>run</goal>
</goals>
</execution>
</executions>
</plugin>
我已经安装了protobuf版本 2.4.1 和 protoc 可通过命令行使用,并且我在 pom 中包含的 protobuf-java 版本也是来自 com.google.protobuf 组的 2.4.1。正如我之前提到的,我必须使用这个技术堆栈,因为我正在使用现有的代码库,但尽管有更新版本的 protobufs,但这不是我遇到的问题。
问题是从 protoc 二进制文件生成的代码(由上述 maven 插件调用)没有实现从 maven 导入到我的项目的 protobuf 库中定义的父类的抽象函数。这是错误:
[ERROR] <generated java class from protoc> is not abstract and does not override abstract method getParserForType() in com.google.protobuf.MessageLite
我的假设是 protobuf 库存在一些配置错误,并且该函数 getParserForType 存在于其中一个库中,但在另一个库中不存在。
最佳答案
这听起来像是生成的 java 代码和 protobuf jar 库之间的不匹配。 特别是,我认为 java 代码是使用 protoc 2.5.0 生成的,并且您正在运行 protobuf jar 的早期版本 (2.4.1)。
您可以检查正在使用的协议(protocol)版本
protoc --version
如果是2.5.0生成并重新安装protoc版本2.4.1
如果你有2.4.1
- 重新生成 java 类(手动?)
- 与当前类(class)比较
或者尝试使用 2.5.0 版本的 protobuf jar。
注意: 对于大多数版本的 Protocol Buffer 来说,用于生成 java 类的协议(protocol)版本与 jar 库相同并不重要。在 protbuf 2.5.0 中,许多方法从 jar 库中的基类移至生成的代码。
关于java - 使用 Maven 插件生成 Protocol Buffer 会导致版本错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19434437/