【问题标题】:Compilation errors on generated Java code Thrift 0.8.0生成的 Java 代码 Thrift 0.8.0 上的编译错误
【发布时间】:2012-09-13 03:38:28
【问题描述】:

我正在试验一个简单的 Thrift 服务器,并想用 java 编写客户端。 我运行了命令

->thrift -gen java BLT.thrift

生成的 java 文件 Optimization.java 在 Eclipse IDE 中显示如下错误。

public static class Client extends org.apache.thrift.TServiceClient implements Iface

错误:TServiceClient 类型不能是 Client 的超类;超类必须是类

public Client(org.apache.thrift.protocol.TProtocol prot)
{
  super(prot, prot);
}

构造函数 Object(TProtocol, TProtocol) 未定义。 .....

我还是继续编译。

->mvn clean install

Optimization.java:[38,54] no interface expected here
[ERROR] /thrift/Optimization.java:[39,83] type parameter model.thrift.Optimization.Client is not within its bound
[ERROR] /thrift/Optimization.java:[68,6] cannot find symbol
symbol  : method
sendBase(java.lang.String,com.model.thrift.Optimization.maximizeRevenue_args)
location: class model.thrift.Optimization.Client
[ERROR] /thrift/Optimization.java:[74,6] cannot find symbol
symbol  : method
receiveBase(model.thrift.Optimization.maximizeRevenue_result,java.lang.String)
location: class model.thrift.Optimization.Client
[ERROR] /thrift/Optimization.java:[98,97] cannot find symbol
symbol  : variable ___protocolFactory
location: model.thrift.Optimization.AsyncClient
[ERROR] /thrift/Optimization.java:[98,117] cannot find symbol
symbol  : variable ___transport
location: class model.thrift.Optimization.AsyncClient
[ERROR] /thrift/Optimization.java:[99,10] cannot find symbol
symbol  : variable ___currentMethod
location: class model.thrift.Optimization.AsyncClient
[ERROR] /thrift/Optimization.java:[100,6] cannot find symbol
symbol  : variable ___manager
location: class thrift.Optimization.AsyncClient
[ERROR] /thrift/Optimization.java:[387,23] cannot find symbol
symbol  : method getScheme()
location: class org.apache.thrift.protocol.TProtocol
[ERROR] /thrift/Optimization.java:[391,23] cannot find symbol
symbol  : method getScheme()
location: class org.apache.thrift.protocol.TProtocol
[ERROR] /thrift/Optimization.java:[665,23] cannot find symbol
symbol  : method getScheme()
location: class org.apache.thrift.protocol.TProtocol
[ERROR] /thrift/Optimization.java:[669,23] cannot find symbol
symbol  : method getScheme()

-> mvn dependency:tree | grep -i thrift
[INFO] \- org.apache.thrift:libthrift:jar:0.8.0:compile

-> thrift -version java
Thrift version 0.8.0

我确实找到了这个帖子,但推荐的解决方案对我不起作用 Maven Thrift repository

我还对用于生成代码的 jar 和使用上述 pom.xml 提取的 jar 进行了校验和。有人知道为什么这些会有所不同

->md5sum /usr/local/lib/libthrift-0.8.0.jar
fff7102558cb0ab1c103b62752166ce8  /usr/local/lib/libthrift-0.8.0.jar

->md5sum ~/.m2/repository/org/apache/thrift/libthrift/0.8.0/libthrift-0.8.0.jar
d68695bb2406cb2ab5fbae6ff6e27d7e
/home/nipun/.m2/repository/org/apache/thrift/libthrift/0.8.0/libthrift-0.8.0.jar

任何帮助/见解将不胜感激。

【问题讨论】:

  • 我的 pom.xml 中有以下依赖项 我的 pom.xml 中有以下依赖项 org.apache.thriftlibthrift0.8.0

标签: thrift


【解决方案1】:

看起来您链接的 libthrift 版本错误: org.apache.thrift.TServiceClient 在 0.8.0 中定义如下:

public abstract class TServiceClient

在 0.6.1 中:

public interface TServiceClient

我建议检查您的项目中是否存在对旧 libthrift jar 的传递依赖项。

【讨论】:

  • 感谢您指出这一点。事实证明,我的 pom.xml 引用了导致这些问题的 hadoop jar。令人惊讶的是,做 mvn dependency:tree | grep -i thrift 只显示 org.apache.thrift:libthrift:jar:0.8.0:compile。似乎 hadoop 将 thrift jar 打包而不是将其作为依赖项。
  • +1 用于注意版本。甚至我对 0.8 和 0.9 也有问题。某些方法签名已更改。注意 Thrift 编译器版本和 libthrift jar 版本匹配。
猜你喜欢
  • 2012-04-14
  • 2017-01-27
  • 1970-01-01
  • 2018-01-14
  • 1970-01-01
  • 1970-01-01
  • 2017-01-30
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多