java - 使用 Maven 插件生成 Protocol Buffer 会导致版本错误

标签 java maven protocol-buffers

我正在尝试构建一些预先存在的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/

相关文章:

java - Spring boot 2.0.3 + 安全性 + Oauth2 自动配置

java - 在 Java IOException Premature EOF 中读取网页

java - 为什么在尝试从表单获取数据时会出现此错误?

java - 如何隔离特定于平台的 JNA 绑定(bind)?

java - maven pom.xml如何识别非标准项目结构中的testng测试用例?

java - 错误/java.lang.NoClassDefFoundError : com/google/api/services/pubsub/PubsubScopes

java - 找不到名称为 'sessionFactory' 的 bean 的类 [org.springframework.orm.hibernate3.annotation.AnnotationSessionFactory]

android - 将protobuf与android studio一起使用时,gradle构建时编译时间错误

c++ - 在 C++ 中更改现有 protobuf 消息的元素

c++ - protobuf 库在消息实例化时抛出 FatalException