首页 > 解决方案 > 在 Termux 上使用 ecj 编译失败 lambda 表达式

问题描述

在 Termux 上使用 ecj 编译会产生以下错误消息:

Lambda 表达式仅允许在源级别 1.8 或更高版本中使用。

运行该工具时未指定任何选项。

使用 switch - 1.8 编译会产生以下输出:

ecj -1.8 Composite2

重复合规性设置规范:-1.8

Composite2 是我的源代码所在的目录。

接下来我尝试了以下操作:

ecj -source 1.8 -target 1.8 Composite2

合规级别“1.7”与源级别“1.8”不兼容。要求合规级别为“1.8”或更高。

来源可在此处获得

我缺少任何设置或开关吗?我不熟悉使用 ecj 作为编译器。

你能帮我吗?

似乎有诸如 Retro Lambda 和反向移植之类的解决方案可以使 Java 8 源代码在 7 或更早版本上工作。不过,我还没有尝试过。一个人能查到的就这么多。(有关说明,请参阅下面的评论)。


一种解决方法可能是在 Termux 上安装 Arch Linux。. 不过,命令提示符可能有点错误。

然后,您可以使用包管理器 pacman 安装 Open JDK 8 和 eclipseecj。

那行得通;ecj 现在编译 1.8 代码。

我希望避免安装完整的 JDK,因为它会引入冗余并占用额外的空间。

标签: lambdatermuxecj

解决方案


Android 7 上的 Termux 不支持超过 7 的任何 java 版本。Termux 上的 ARCH Linux 最多支持 Java 13。最好的选择是在 Arch Linux 上为 Termux 安装 OpenJDK,并使用 javac 而不是 ecj。Arch Linux 上的 ecj 还存在其他问题,例如仅支持 Java 8。


推荐阅读