lambda - 在 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,因为它会引入冗余并占用额外的空间。
解决方案
Android 7 上的 Termux 不支持超过 7 的任何 java 版本。Termux 上的 ARCH Linux 最多支持 Java 13。最好的选择是在 Arch Linux 上为 Termux 安装 OpenJDK,并使用 javac 而不是 ecj。Arch Linux 上的 ecj 还存在其他问题,例如仅支持 Java 8。
推荐阅读
- jenkins - 无法在 GitHub 中添加 SSH 密钥
- c++ - 使用 Teechart 最简单、最快地绘制 sigmoid 曲线
- group-by - where expression group by (col) vs group by (col) 有表达式
- javascript - 如何仅使用 Javascript 一次显示一个数组元素?
- android - Android - 在没有 onActivityResult() 的情况下从活动传回信息的最佳做法是什么?
- java - 理解增量和减量
- powershell - 如何从 PowerShell 以编程方式列出 VSTS 代理池?
- c# - 我有 3 个任务,我希望它们同时开始并并行运行
- mysql - MySQL datetime '0000-00-00 00:00:00' 默认值的替代方案
- scala - Playframework [Scala]:创建表单