Retrotranslator -- JDK1.5->1.4降级工具
来源:互联网 发布:曜俊树x先导爱知h 编辑:程序博客网 时间:2024/06/13 22:12
老掉牙的jdk1.4还没有走出历史的舞台。这几天尝试着将jdk1.5编写的程序使用Retrotranslator转为jdk1.4可使用的版本,结果不是太理想,在转spring3.0.5的一些包的时候出现了一些问题:如:
java.lang.system.getenvjava.lang.thread.remove
这两个java的api在使用spring的过程中会报错,提示不存在该方法。
网上资料看似很多,但是真正写清楚的不多,这里分享一下我的学习过程。
----------------------------------------------------------------------------
下载最新版本Retrotranslator-1.2.9-bin.zip。可以解压后看readme.html文件,里边的教程比较好。
使用的包:
- retrotranslator-transformer-1.2.9.jar 用于转换class和jar的包;
- retrotranslator-runtime-1.2.9.jar 放到项目的lib文件夹中;
- backport-util-concurrent-3.1.jar 放到项目的lib文件夹中;
我采用的转换方式是Ant脚本方式:
- 转换class
<target name="jdk14src" depends="jdk14jar"> <retrotranslator destdir="${Retrotranslator.dist.dir}/class" verify="true"> <!-- 包含class文件,并换成1.4的class文件--> <fileset dir="${Retrotranslator.class.dir}" includes="**/*.class"/> <classpath location="${jdk14_home}/jre/lib/rt.jar"/> <classpath refid="compile.classpath1.4"/> </retrotranslator> </target>
- 转换jar
<retrotranslator srcjar="${Retrotranslator.jar.dir}/@{jarname}.jar" destjar="${Retrotranslator.dist.dir}/lib/@{jarname}-jdk14.jar" verify="true" advanced="true" failonwarning="Off"><classpath location="${jdk14_home}/jre/lib/rt.jar"/><classpath refid="compile.classpath"/></retrotranslator>说明一下:
- verify属性:特别重要,设置为true的话,他会校验转换的jar或class中用到的jdk-api是否支持转换,如不支持会提示
- 转换jar的时候,不支持批量转换,所以,需要使用宏操作:
<!-- 对jar包进行转换 --> <macrodef name="jdk14jar"><attribute name="jarname"/><sequential><retrotranslator srcjar="${Retrotranslator.jar.dir}/@{jarname}.jar" destjar="${Retrotranslator.dist.dir}/lib/@{jarname}-jdk14.jar" verify="true" advanced="true" failonwarning="Off"><classpath location="${jdk14_home}/jre/lib/rt.jar"/><classpath refid="compile.classpath"/></retrotranslator></sequential></macrodef>使用的时候如此调用:
<!-- 批量对jar包进行转换 --> <target name="jdk14jar" depends="init"> <!-- 直接把jar文件转换成1.4的jar文件--> <jdk14jar jarname="commons-lang-2.5"/> <jdk14jar jarname="commons-logging-1.0.4"/> <jdk14jar jarname="commons-pool-1.5.4"/> <jdk14jar jarname="freemarker"/> </target>-------------------------------------------------------------------------------------------
另外,使用Ant打jar的话,有三种方式,这位同行说的比较清楚 http://blog.csdn.net/caiqcong/article/details/7618582,我采用的是第三种方法。
<!-- 打包成可执行jar --><target name="jar"><jar basedir="${Retrotranslator.dist.dir}/class" destfile="${Retrotranslator.dist.dir}/CreateEmailFiles.jar"><manifest><attribute name="Main-Class" value="org.mice.tax.CreateTaxEmailIndex"/><attribute name="Class-Path" value=". lib/backport-util-concurrent-3.1.jar lib/retrotranslator-runtime-1.2.9.jar lib/commons-lang-2.5.jar lib/commons-logging-1.0.4.jar lib/commons-pool-1.5.4.jar lib/freemarker.jar lib/ldapbp-1.0.jar lib/log4j-1.2.9.jar lib/spring.jar lib/spring-ldap.jar lib/xercesImpl.jar lib/xml-apis.jar"/></manifest></jar></target>
其他配置:
<!-- 配置文件路径 --> <property file="build-dist.properties"/> <!-- 所有jar包路径 --> <path id="compile.classpath"> <fileset dir="${Retrotranslator.dir}"> <include name="**/*.jar"/> </fileset> </path><!-- 所有新生成的1.4版本的jar包路径 --> <path id="compile.classpath1.4"> <fileset dir="${Retrotranslator.dist.dir}/lib"> <include name="**/*.jar"/> </fileset> </path> <!-- 初始化任务,定义任务名称 --> <target name="init"> <mkdir dir="${Retrotranslator.dist.dir}"/> <mkdir dir="${Retrotranslator.dist.dir}/lib"/> <mkdir dir="${Retrotranslator.dist.dir}/class"/> <taskdef name="retrotranslator" classpathref="compile.classpath" classname="net.sf.retrotranslator.transformer.RetrotranslatorTask" /> </target>
- Retrotranslator -- JDK1.5->1.4降级工具
- NO.3 Retrotranslator使用简介(JDK1.5->1.4)/Why JDK1.4.
- 代码降级 (解决JDK1.5的代码在转到1.4下无法运行)
- java jsoup 降级使用(jdk1.5在jadk 1.4环境下使用)
- jdk1.8降级
- Retrotranslator让你用JDK1.5的特性写出的代码能在JVM1.4中运行
- jdk1.7降级到1.6
- iOS9.2.1降级工具和降级过程
- Retrotranslator--将JDK5.0项目完全转换为JDK1.4 字节码的恩物
- Retrotranslator--将JDK5.0项目完全转换为JDK1.4 字节码的恩物
- Retrotranslator--将JDK5.0项目完全转换为JDK1.4 字节码的恩物
- Retrotranslator--将JDK5.0项目完全转换为JDK1.4 字节码的恩物
- jdk1.8降级为1.7旧版本
- Retrotranslator 转换1.5的class到1.4的class
- 试用Retrotranslator
- 降级
- Visual Studio工程文件降级工具
- jdk1.8开发工具
- 整数二进制表示中1的个数
- 区分汇编中的变量和标号
- 用eclipse来开发C/C++
- sql2000读写数据库时死机,数据库置疑,附加报823错误。
- 单例模式
- Retrotranslator -- JDK1.5->1.4降级工具
- List<? extends Map<String, ?>> 如何理解呢?
- iOS多线程编程指南-目录
- Conversion to Dalvik format failed with error 1
- 开发人员 SWIG 快速入门
- Linux命令学习手册-readelf命令
- 一步步理解Linux进程(3)--内核中进程的实现
- 关于WebLogic的Session丢失的问题
- Linux-网桥原理分析