将 Java 代码 1.5 降级到 1.4(奖励积分:J2ME、Blackberry !!!)

Posted

技术标签:

【中文标题】将 Java 代码 1.5 降级到 1.4(奖励积分:J2ME、Blackberry !!!)【英文标题】:Downgrade Java code 1.5 to 1.4 (bonus points: J2ME, Blackberry!!!) 【发布时间】:2010-10-31 19:07:54 【问题描述】:

我想移植一些现有的 j2se 库(例如 Apache Compression 库)以用于 Blackberry 开发,但有一个问题(而不仅仅是一个问题)。

首先,大多数 java 库广泛使用 j2me 平台上通常缺少的 j2se 集合和数据类型——但这在理论上是可以解决的,这要归功于 Apache Harmony 等开源 j2se api 实现。更大的问题是,Blackberry JDK 似乎基于 java 1.4,因此任何使用泛型和其他 1.5 特性(如枚举)的代码都无法在 Blackberry 上轻松编译。

这引发了一个有趣的问题,即是否有任何现有的工具或项目可以进行自动 1.5->1.4 转换,同时支持 j2me-bastardized 字节码 :)

我能找到的一个项目是Retroweaver,但我不太确定该项目的活跃程度。

我确定 1.5->1.4 自动转换的问题不是唯一的——那么有人有经验吗?

【问题讨论】:

1.4 不会给你 java me,因为“所有 Java ME 平台目前都仅限于 JRE 1.3”(source: Wikipedia) - 例如,Java ME 没有特定于 JDK 1.4 的断言跨度> 【参考方案1】:

我过去使用过 retroweaver(J2SE,而不是 J2ME)——它工作得非常好。使用它的代价是一些额外的运行时依赖。

2013-01-28 更新:在遇到 RetroWeaver 问题后,我已切换到 RetroTranslator。

【讨论】:

【参考方案2】:

你试过Retrotranslator吗?我读到它比 Retroweaver 做得更好。

【讨论】:

太棒了,谢谢!这似乎比 retroweaver 有更好的文档。我得玩一会儿:) 我想,我唯一关心的是这些工具如何受到编译器为 j2me 平台生成的类文件中的字节码差异的影响。 由于我无法评论其他人在帖子中制作的 cmets(还没有 50 声望),我将它们发布在这里: - 关于使用 1.5 作为源和 1.4 作为目标进行编译,它只有在你的代码中不使用任何 1.5 特性时才会起作用(虽然很惊讶它对泛型有用,但我可以明白为什么因为泛型在运行时“消失”),因此它没有帮助。 - 关于您发现的其他工具,我希望至少有一个可以帮助您解决问题的各个方面。【参考方案3】:

这里是 something else 我在堆栈溢出时发现的:

使用常规 javac 编译并针对较旧的 JVM 将至少为您提供适当的泛型字节码

这绝对是有意义的尝试。

【讨论】:

我记不太清了,但我认为泛型还可以,但不支持枚举/新语法。可能在后来的 javac 中已经修复了,但当时我看的时候,它几乎不能用。这也是我最终改用 retroweaver 的原因之一。 不幸的是,这不起作用。 javac 不接受高于目标版本的源版本,因此您只能在编译失败和无法在目标平台上运行的结果之间进行选择。 Sun“javac”不能(不会?)这样做。 Eclipse 编译器“ecj”即可。它可以轻松集成到ant和maven java编译任务中。【参考方案4】:

这是我发现的另外两个工具(链接自 Retrotranslator 的页面):

Declawer JBoss Retro

【讨论】:

【参考方案5】:

这就是我到目前为止所做的事情:Declawer + 一些用于生成枚举类的自定义代码。

Declawer 的一个不同之处在于,尽管它非常简单,坦率地说,有点像 hack(它依赖于 JavaC 的未记录功能),但与增强或转换后的 Java 字节码相比,它的输出是实际的 Java 代码.这对于基于 Java 的移动开发来说是非常宝贵的,因为坦率地说,字节码修改/工具在 j2me 平台上的开发完全不如为 j2se 开发的那样,而且不能保证事情会以这种方式开箱即用。他们使用 j2se,这些工具已经被很多开发人员使用。

Declawer 的功能有限(不喜欢 1.5 枚举或自动装箱),所以我不得不添加一个 python 脚本来自动从简单的描述符生成功能与 1.5 枚举等效的类。这一代发生在构建时。

到目前为止,这解决了我的担忧,唯一的例外是找到一个对 j2me 友好的 IoC 容器用于我的应用程序(一旦你尝试了这些人,就很难放弃它们。)

但这是针对不同主题的讨论。

【讨论】:

以上是关于将 Java 代码 1.5 降级到 1.4(奖励积分:J2ME、Blackberry !!!)的主要内容,如果未能解决你的问题,请参考以下文章

Atitit..jdk java 各版本新特性 1.0 1.1 1.2 1.3 1.4 1.5(5.0) 1.

将 .tif 转换为 pdf/A 1.4 或 1.5

从头认识java-目录

halo博客系统1.4升级到1.5踩坑记录

如何降级使用 angular2 编写的自定义管道以在 angular 1.5 中使用?

将 java 从版本 8 降级到 7