【问题标题】:Error while compiling thrift generated classes with Java 1.5使用 Java 1.5 编译节俭生成的类时出错
【发布时间】:2014-10-31 15:07:53
【问题描述】:
`Platform`: Windows 7, MinGW, MSYS, Java 1.5

我有 thrift 0.9.1 编译器(为 Windows 预构建)和源代码。我使用 Ant 构建 java 库。 我创建了一个 thrift idl 并使用编译器对其进行编译。生成代码文件没有问题。 我在我的项目中添加了这些文件,并添加了 slf4j(从他们的站点下载)和 libthrift。 我之前遇到的大多数错误(导入等)都消失了,除了与覆盖方法相关的错误。 所以基本上它会抱怨:

Server 类型的方法 clear() 必须覆盖超类方法

同样适用于compareTowriteread 等。简而言之,它抱怨所有被覆盖的方法。这是所有 thrift 编译器生成的代码,我没有更改任何内容。

有什么不兼容的地方吗?我真的找不到任何提及。我试过删除然后添加库,我也尝试过清理、刷新、验证项目,但错误仍然存​​在。

我也尝试过编译代码(节俭代码),但 MinGW 也是一个非常令人头疼的问题。即使我已经安装它也找不到configure。如果我运行msys 控制台,它可以configure 但不能make 抱怨inttypes.h 不存在(它不在msys 包含目录中,但存在于MinGW 包含目录中。)。

任何建议将不胜感激。

【问题讨论】:

  • 这与stackoverflow.com/questions/26631900/…有关还是其他?
  • 顺便说一句,在 Windows 上不要使用 MinGW。编译器文件夹中有一个 Visual Studio 项目。您基本上只需要 flex/bison 支持,在网络上的某个地方有一个适用于 Windows 的安装包就可以了。 IIRC就是这样。奇迹般有效。据我所知,由于一堆与 MinGW 相关的错误,MinGW 构建不再适用于 Windows。由于 VS 项目运行良好,因此不再需要 PITA。
  • 这是次要问题,我也可以从他们的网站获取二进制文件。但主要问题是生成的代码无法编译
  • "但主要问题是生成的代码无法编译" - 老实说,难以置信。可以准备一个测试用例吗?
  • 我刚刚添加了您“忘记”要提及的重要信息。

标签: java c++ eclipse compilation thrift


【解决方案1】:

您使用的是 Java 5 吗?在 Java 5 中,@Override 不会在接口上搜索方法,而只会在超类上搜索。

如果您正在使用 Java 5 编译器,尝试使用更新的 javac(最好是 7 或 8)并查看效果。

编辑:

不确定这是否在您的 Thrift 版本中,但在我的版本中,您似乎在生成代码时指定了一个名为 java5 的标志,以指定您希望生成的代码符合 Java 5 标准

java (Java):
    beans:           Members will be private, and setter methods will return void.
    private-members: Members will be private, but setter methods will return 'this' like usual.
    nocamel:         Do not use CamelCase field accessors with beans.
    fullcamel:       Convert underscored_accessor_or_service_names to camelCase.
    android:         Generated structures are Parcelable.
    android_legacy:  Do not use java.io.IOException(throwable) (available for Android 2.3 and above).
    java5:           Generate Java 1.5 compliant code (includes android_legacy flag).
    reuse-objects:   Data objects will not be allocated, but existing instances will be used (read and write).
    sorted_containers:
                     Use TreeSet/TreeMap instead of HashSet/HashMap as a implementation of set/map.

【讨论】:

  • 谢谢。不知道。
  • 我可以让它在 1.5 中运行的任何方式(只需删除注释)
  • 编辑了我的答案以提及 java5 标志,希望对您有所帮助
猜你喜欢
  • 2012-11-25
  • 1970-01-01
  • 2014-08-04
  • 2012-03-21
  • 1970-01-01
  • 1970-01-01
  • 2019-12-27
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多