Retroweaver是一款代码转换工具,它允许你在Java代码中使用Java 5的语言特性,却能让其运行在jdk 1.4(或更早版本)的虚拟机上,Retroweaver操作的对象是Java 5编译过的class文件,然后将其转换成为可以在之前版本的Java虚拟机上运行的class文件,Retroweaver是跨平台的,你不需要有这此担心。下面让我们看看如何在实际开发中使用Retroweaver。
1 安装:首先从http://www.sourceforge.net/projects/retroweaver下载Retroweaver开发包,也就是retroweaver-all.jar文件,下载后解压即可。这里对解压的目录做一个说明,docs是文档目录;lib目录包含第三方开发包,Retroweaver在执行代码转换时需要用到这些开发包,这些开发包仅在转换时用到,在部署、运行时都不需要;release目录包含以下几个文件:转换后代码运行时所需的retroweaver-rt.jar文件,该文件6K不到,你只需将其加入到运行程序的CLASSPATH中即可;retroweaver.jar则是运行转换时所需的程序包;retroweaver-ex.jar则是一个提供了图形界面的应用程序,你可以使用该程序提供的界面执行转换操作。
2 使用:首先你的开发不受任何打扰,你使用钟爱的IDE工具编写Java 5的代码,然后编译、测试等,最后我们将这些Java 5编译后的class文件通过Retroweaver转换成之前Java版本虚拟机能够运行的class文件,通过以下命令就可以完成:
> java -cp release\retroweaver.jar;lib\bcel-
5.1.jar;lib\jace.jar;lib\Regex.jar com.rc.retroweaver.Weaver
-source classes
这样Retroweaver就会将classes目录下的所有Java 5编译后的class文件转换为我们期望的格式。当然我们编译时最常用的工具是Ant,如何和Ant整合,Retroweaver也提供了:
<taskdef name="retroweaver"com.rc.retroweaver.ant.RetroWeaverTask">
<classpath>
<fileset dir="${retroweaver.home}/lib" includes="**/*"/>
<pathelement
location="${retroweaver.home}/release/retroweaver.jar"/>
</classpath>
</taskdef>
<retroweaver srcdir="classes"/>
这样在执行基于Java 5的编译操作后,我们再执行这样的Ant Task就可以自动完成转换啦。 如果命令行或Ant都不可以的话,你可以使用Retroweaver提供的图形界面程序,只需执行retroweaver-ex.jar文件即可。
3 API问题:Retroweaver主要是处理Java 5的语言特性,所以如果你引用了Java 5提供的新的API,这些代码将无法在以前版本的虚拟机上运行,就会出现ClassNotFoundException、NotSuchMethodException、NotSuchFieldException等等,当前Retroweaver仅能处理java.lang.Enum, java.lang.Iterable, java.lang.StringBuilder这三个接口或类,所以要注意API的调用,记住Retroweaver是处于Java 5的语言特性,而不是兼容之前的API。
4 和IDEA整合:在实际的开发中,如果能将Retroweaver和IDE工具绑定起来,那么操作就会更加方便。首先我们可以通过Plugin Manager下载“Retroweaver Integeration”插件,安装完毕后,我们只需选中“Build”菜单下的“Retroweaver compiled classes”选项即可,这样在IDEA执行编译操作后会自动执行Retroweaver转换,不需要你的干涉。最后需要注意的是将retroweaver-rt.jar加入到项目的CLASSPATH中,这样就可以正确运行你编写的程序,操作就是这么简单。
总结:有这样一个事实,使用Java 5的语言特性对我们的开发效率有非常大的提高,好多以前很难解决的问题使用Java 5将非常方便。Retroweaver当前支持以下语言特性:generics、extended Loop、static imports、autoboxing/unboxing、varargs、enumerations、annotations。如果你的客户或经理始终坚持使用Jdk 1.4或以前版本的虚拟机,而你有想通过Java 5的特性提升你的开发效率,Retroweaver是非常好的选择。
讲了这么多,Retroweaver有没有实际的应用例子,有的,那就是IDEA。IDEA的所有代码正逐渐向Java 5过渡,这个过程中仍然需要IDEA能够运行在Jdk 1.4上,你可以看到一部分IDEA代码开始使用Java 5语言特性,但是通过Retroweaver转换,现在IDEA 5仍然可以运行在Jdk 1.4上。
本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请
点击举报。