JDK降级到1.4
1 使用工具Retrotranslator
????? http://retrotranslator.sourceforge.net/
??? 下载工具Retrotranslator-1.2.9-bin.zip,将其解压到E:\retrotranslator
?
?
2 工具介绍
?? Retrotranslator是一个Java字节码转换工具。它能够把用JDK1.5编译的Java Class转换成可运行在JVM1.4。支持的Java 5.0特性包括:泛型、注释、枚举、可变参数个数、自动装箱/拆箱、增强式的for循环、静态导入、并行工具(Concurrency Utilities)、增强的collections框架。
但是Retrotranslator只支持Java 5.0新特性,不支持Java 5.0里新的API
?
3 工具的一些限制
The Java 5.0 memory model is not fully supported even with the syncvolatile and syncfinal options if the fields are being accessed via reflection. Only the classes, methods, and fields listed above should work and the other features, like formatted input, are not supported. The Java 1.4 compilers and applications performing bean introspection may fail to work correctly with covariant return types. The backported implementation of the Java 5.0 API is not interoperable with the original implementation. Reflection-based tools may be unable to discover the backported implementation of the Java 5.0 API. The Java 5.0 reflection methods may return incomplete information for dynamically generated classes. The constants inlined by a compiler and access modifiers are ignored during the verification.4 转换内容分类
??? 需要转换的内容分为2种:jar包和classes文件的文件
?
5 转换方式
?
??5.1 命令行方式
?
???5.1.1 降级class文件
?
???????? 将含有jdk1.5编译的class文件放到e:\retrotranslator\classes下,同时新建文件夹classes14,用于存放重新编译生成的1.4版本的class文件。
??cmd进入到e:\retrotranslator下,然后执行
????java -jar retrotranslator-transformer-1.1.9.jar -srcdir classes -destdir classes14
???
?? 执行结果如下:
???? Processing 21 file(s) from classes to class14.
???? Transformed 14 file(s).
?
? 5.1.2 降级jar包
?
?
?
????? 将含有jdk1.5版本class的jar包,放到e:\retrotranslator\lib下,同时新建lib14文件夹,用于存放新生成的jar包
?????? cmd进入到e:\retrotranslator下,然后执行
????java -jar retrotranslator-transformer-1.1.9.jar -srcjar?lib/struts2-core-2.1.8.1.jar -destjar lib14/struts2-core-2.1.8.1-j14.jar
?
?? 执行结果如下:
?? Processing 600 file(s) from lib\struts2-core-2.1.8.1.jar to lib14\struts2-core-2.1.8.1-j14.jar.
?? Transformed 413 file(s).
? 注意:
??? 转换jar包,一次只能转换一个,class文件可以批量转换
5.2 其它转换方式
?? 5.2.1 ant方式编译
?? 编写build.xml文件,用ant编译,文件内容如下:
<?xml version="1.0" encoding="UTF-8"?>
<project default="translate" name="pluto-project" basedir=".">
<target name="translate">?
?? ?<path id="classpath">
?? ? ? ?<fileset dir="项目文件的lib文件夹所在位置" includes="**/*.jar"/>
?? ?</path>
?
?? <taskdef name="retrotranslator" ?
?? ? ?classname="net.sf.retrotranslator.transformer.RetrotranslatorTask" /> ?
?? <retrotranslator ?
?? ? ?destdir="ant编译后生成文件的目录" verify="true" ? ?
?? ? ?srcdir="项目编译后classes文件夹所在目录"> ?
?? ? ?<!-- 项目中用到的包或类 --> ? ? ?
?? ? ?<classpath refid="classpath"/> ? ?
?? ? ?<!-- 1.4JDK的运行时包 --> ?
?? ? ?<classpath location="jdk1.4.2安装目录/jre/lib/rt.jar"/> ?
?? </retrotranslator> ?
</target> ?
</project>