作者:江南白衣
原文出处及讨论: http://www.blogjava.net/calvin/archive/2006/01/13/27913.html
稳健的开发团队一般不会随意升级项目的JDK,而那些真金白银买了Weblogic的用户,因为Weblogic9以下都不支持JDK5.0,就更不会升级了。然后,看着EJB3,Spring 2不断有新功能和annotation相关,而自己的系统架构只能按兵不动。
本来SpringSide为了适用范围,已经决定坚守JDK1.4了,但忽然发现Retroweaver这个好东西,能够在JDK1.4上获得annotation,范型,autoboxing的语法特征。介绍文章有
JetBrains IDEA中文:Retroweaver简介
IBM DW:Classworking 工具箱: 在旧版 JVM 上使用 J2SE 5.0 特性
本来担心开源项目不可靠,但JetBrains IDEA已经为它做了背书,用它把IDEA的代码逐步升级为JDK5.0 而仍然可在JDK1.4上运行。
和Jarkarta Common Atrributes,Backport175在JDK1.4语法下支持annotation的别扭思路不同,Retroweaver允许你直接用JDK5.0进行开发,然后在byte code级把它转换回JDK1.3,1.4支持的指令。
而且,IDEA提供了一个plug-in,把转换的动作透明的集成了。
典型应用场景1:某类库用JDK5编译,不能在JDK1.4上运行。
今天的FunctionalJ就是这个情况。
我把jar包解开,用Retroweaver自带的GUI把里面的class文件转换后重新打包,成功运行!!!
典型应用场景2:项目里使用Spring 2.0,Drools的annotation、autoboxing特征
直接把项目的JDK设为5.0,在JDK5.0下使用上述特征,编译后通过命令行、ant脚本把class文件降为JDK1.3,JDK1.4版。
如果你用的是IDEA,插件能透明的完成这步操作。
注意:Retroweaver支持的是JDK5.0的新语法特性,而JDK5.0新增的API它是不包的。
幸亏IDEA的plug-in,能提醒你有没有使用了超越目标JDK的API。
如果你的目的只是在JDK1.4上使用Spring的annotation,这个问题倒不大。