【问题标题】:Thrift include: Type has not been definedThrift 包括:类型尚未定义
【发布时间】:2018-09-28 20:51:26
【问题描述】:

我有两个 thrift 文件:common.thriftproto.thrift

内容:

common.thrift

namespace java ru.domain.myserv.common

struct MyStruct {
    1: i32 val
}

service MyServ {
    1: MyStruct myStruct,
    2: i32 val
}

proto.thrift

include "common.thrift"

namespace java ru.domain.myserv.proto

typedef ru.domain.myserv.common.MyServ MyServ

struct ProtoServ {
    1: MyServ myServ
}

接下来,我运行 thrift 生成器:

thrift -r -out ../java --gen java proto.thrift

我在控制台中看到一个错误:

[ERROR:/path/proto.thrift:8] (last token was 'ru.domain.myserv.common.MyServ') Type "ru.domain.myserv.common.MyServ" has not been defined.

我做错了什么?

【问题讨论】:

    标签: thrift


    【解决方案1】:

    天哪。

    我必须指定

    typedef common.MyServ MyServ

    而不是

    typedef ru.domain.myserv.common.MyServ MyServ

    但是namesapace 有什么必要呢?

    【讨论】:

    • namespace 用于代码生成。请注意,您可以有多个命名空间,每种目标语言一个。当然还有星号形式namespace * myapi.myapp.com。因此,在 IDL 中,使用 namespace 进行引用(是哪一个?)会变得有点复杂——而且过于冗长。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-01-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-12-01
    • 1970-01-01
    • 2014-04-29
    相关资源
    最近更新 更多