我正在尝试构建一些预先存在的Java代码,其中包含传输层中的Google协议缓冲区。我正在使用的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存在于其中一个库中,而不存在于另一个库中。
答案 0 :(得分:0)
这听起来像是生成的 java代码与protobuf jar库之间的不匹配。 特别是我认为java代码是使用 protoc 2.5.0 生成的,并且您正在运行 protobuf jar的早期版本( 2.4.1 )
您可以通过
查看正在使用的 protoc 的版本protoc --version
如果是2.5.0生成并重新安装 protoc 版本2.4.1
如果你有2.4.1
Alternaitely尝试使用 protobuf jar 的 2.5.0 版本。
注意:强> 对于大多数协议缓冲区版本,用于生成java类的protoc版本与jar库相同并不重要。在protbuf 2.5.0中,很多方法从jar库中的基类移动到生成的代码。