Pet*_*ler 8 java backport java1.4
我们一直坚持使用Java2SE v1.4直到2010年底.这真的很讨厌,但我们无法帮助它.我们现在有哪些选项可以使用一些新功能?我可以想到几种方式
更改字节码,例如使用Retrotranslator或Retroweaver.
库的后端,例如Concurrent Backport,但这对泛型无效.
模拟Java 5功能,例如检查集合,带辅助方法的Varargs等.
通过预编译更改源代码,在最终编译之前剥离所有1.5内容,例如使用Declawer可以执行此操作.
我最感兴趣的是使用Weblogic和"真实"的东西在生产环境中积极体验它.
Pet*_*ler 11
谢谢你的回答.以下是所有相关答案和我自己的研究的摘要.
更改字节码:Retros
这是由"retro" -tools完成的:Retrotranslator,Retroweaver和JBossRetro.逆向转化器似乎是它们中最成熟和最活跃的工具.这些工具扫描所有类并更改字节码以删除Java 5和6功能.支持许多Java5功能,有些通过使用第三方反向端口库.此选项最受欢迎,用户也会收到一些积极的反馈.实验表明,它正如预期的那样工作.查看developerworks的简短概述.
Pro:您可以完全使用Java 5开发,构建模块和所有类型的JAR.最后,您只需将所有类转换为Java 1.4并打包您的EAR.这可以通过Retrotranslator的Maven集成(org.codehaus.mojo:retrotranslator-maven-plugin)轻松完成.
Con:保守的环境不允许部署更改的字节码.任何编码器都看不到后向步骤的结果,并且无法获得批准.第二个问题是恐惧:可能存在一些神秘的生产问题,而复古代码是另一个可能被指责的步骤.应用程序服务器供应商可能会因更改字节码而拒绝帮助.所以没有人愿意承担在生产中使用它的责任.由于这是一个政治问题,而不是技术问题,所以我认为没有解决方案.它发生在我们身上,所以我正在寻找更多选择:-(
将Java5编译为Java 1.4:jsr14
有一个不受支持的选项,javac -source 1.5 and -target jsr14它将Java5源代码编译为有效的Java 1.4字节码.无论如何,编译器会翻译大多数功能,如varargs或扩展for循环.泛型和注释被剥离.不支持枚举,我不知道自动装箱,因为这些valueOf方法主要是在Java5中引入的.
Con:仅翻译字节代码,不更改库使用.所以你必须小心不要使用Java5特定的API(但可以使用Backports).此外,您必须同时构建所有模块,因为在开发时,您可能希望Java5代码具有通用和注释信息.因此,您必须从头开始构建整个项目以进行Java 1.4生产.
将Source更改回Java 1.4:声明
如相关问题所述,有一个Declawer,一个编译器扩展,适用于泛型和varargs,但不适用于增强的循环或自动装箱.生成的源"有点时髦,但不是太糟糕".
Pro:生成的源可用,可以查看.在最坏的情况下,可以在此源中进行修复.没有"魔力",因为源是有效的Java.有些人甚至使用JAD(Java反编译器)再次获取Java 1.4源代码.如果使用调试信息进行编译并且不使用内部类,则可读的Jad输出是可读的.
Con:类似于-target jsr14,您需要在部署中执行额外步骤.库也有同样的问题.
将Source更改回Java 1.4:手动
提出几个答案建议手动完成.对于自动重复构建过程,这当然没有用,但对于一次性更改,这是合理的.只需实现可能的自动化.也许看看Antlr创建一个自行开发的转换工具.
Backported Libraries:
问题是,Java5还提供了新的JRE中没有的新库,请参阅相关问题.幸运的是,有几个向后移植的库提供了Java5的一些功能,但无法模拟语言功能,如泛型.
在Java 1.4代码中模拟Java5功能:
我正在考虑一些可能会让您的生活更轻松并且仍然使用Java 1.4的事情.最重要的功能是类型安全的集合,这里有一些想法:
asList允许1,2,...,n参数及其数组的方法(以模拟varargs).1,...,n参数转换为数组)并且valueOf可以放在一些辅助类中.| 归档时间: |
|
| 查看次数: |
3911 次 |
| 最近记录: |