2012-03-03 141 views
1

我的组正在尝试使用Apache Thrift构建服务器,但我们遇到了奇怪的编译问题。在Thrift生成的Java文件中,存在以下行:编译Apache的错误实现抽象类的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的超级接口;一个超接口必须是接口Backend.java /服务器/ src目录/节俭线41的Java问题

我相信这是因为org.apache.thrift.TServiceClient实际上是一个抽象类,而不是一个接口,但客户端正试图实施它。但是,正如我之前所说的,该程序编译和工作,我真的不知道如何。

有没有人有任何想法如何摆脱/抑制这些错误?我有一种感觉,我应该传递给我的构建配置一些简单的选项。

回答

3

我遇到了同样的问题在Eclipse中,以及IntelliJ。

我发现thrift编译器和lib-thrift之间的节俭版本不同步。

我有0.6.0版本节俭的(从$ sudo的港口安装节俭的),我用我的生成Java代码,并使用LIB-节俭0.8.0.jar

我也跟着下面的说明安装Thrift from source, for my platform,然后重新生成和更新我的java生成的节俭代码,并解决了这些错误。

1

行家产生:

<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>