我的小组正在尝试使用Apache Thrift构建服务器,但我们遇到了奇怪的编译问题。在Thrift生成的Java文件中,存在以下行:
public static class Client extends shared.BasicServer.Client implements org.apache.thrift.TServiceClient, Iface {
public static class Factory implements org.apache.thrift.TServiceClientFactory<Client> {
这些被定义为内部类。当我尝试在Eclipse中构建项目时,它实际上创建了.class文件并且程序运行,但是Eclipse仍然说有与这些行相关的各种错误,包括以下内容:
绑定不匹配:Backend.Client类型不是TServiceClientFactory类型的有界参数的有效替代品Backend.java / server / src / thrift line 42 Java问题
TServiceClient类型不能是Client的超接口;一个superinterface必须是一个接口Backend.java / server / src / thrift line 41 Java问题
我相信这是因为org.apache.thrift.TServiceClient实际上是一个抽象类,而不是一个接口,而Client正在尝试实现它。但是,正如我之前所说,程序编译和工作,我真的不明白如何。
有没有人知道如何摆脱/抑制这些错误?我觉得我应该将一些简单的选项传递给我的构建配置。
答案 0 :(得分:3)
我在Eclipse中遇到了同样的问题,以及IntelliJ。
我发现thrift编译器和lib-thrift之间的thrift版本不同步。
我有0.6.0版本的thrift(来自$ sudo port install thrift)我用来生成我的java代码,并使用了lib-thrift-0.8.0.jar
我按照以下说明安装Thrift from source, for my platform,然后重新生成并更新了我生成的java thrift代码并解决了这些错误。
答案 1 :(得分:1)
maven生成:
<dependency>
<groupId>org.apache.thrift</groupId>
<artifactId>libthrift</artifactId>
<version>0.8.0</version>
<type>pom</type>
</dependency>
只需删除元素:类型,然后重建它。
<dependency>
<groupId>org.apache.thrift</groupId>
<artifactId>libthrift</artifactId>
<version>0.8.0</version>
</dependency>