在Termux上使用ecj编译失败lambda表达式

时间:2019-05-04 13:12:00

标签: lambda termux ecj

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

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

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

使用开关编译-1.8将产生以下输出:

ecj -1.8 Composite2

重复法规遵从性设置规范:-1.8

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

我接下来尝试了以下方法:

ecj -source 1.8 -target 1.8 Composite2

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

来源可用here

我是否缺少任何设置或开关?我不熟悉将ecj用作编译器。

你能帮忙吗?

似乎有诸如Retro Lambda和向后移植之类的解决方案,以使Java 8源可以在7或更早版本上运行。我还没有尝试过。一个人只能结帐。 (有关说明,请参见下面的评论)。


一种解决方法是安装Arch Linux on Termux.。但是,命令提示符可能会出现一些问题。

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

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

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

2 个答案:

答案 0 :(得分:1)

Android 7上的Termux不支持7以上的任何Java版本。Termux上的ARCH Linux支持最多Java13。最好的选择是在Termux的Arch Linux上安装OpenJDK,并使用javac代替ecj。 Arch Linux上的ecj还有其他问题,例如仅支持Java 8。

答案 1 :(得分:0)

这似乎是ecj中的一个错误,在这里https://bugs.eclipse.org/bugs/show_bug.cgi?id=535969被报告,并在此处https://bugs.eclipse.org/bugs/show_bug.cgi?id=477894进行了修补。

  

通过Eclipse 4.9平方米Build ID进行验证:I20180731-0800