老掉牙的jdk1.4还没有走出历史的舞台。这几天尝试着将jdk1.5编写的程序使用Retrotranslator转为jdk1.4可使用的版本,结果不是太理想,在转spring3.0.5的一些包的时候出现了一些问题:如:
java.lang.system.getenv
java.lang.thread.remove
这两个java的api在使用spring的过程中会报错,提示不存在该方法。
网上资料看似很多,但是真正写清楚的不多,这里分享一下我的学习过程。
----------------------------------------------------------------------------
下载最新版本Retrotranslator-1.2.9-bin.zip。可以解压后看readme.html文件,里边的教程比较好。
使用的包:
<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>
<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>
说明一下:
<!-- 对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>
-------------------------------------------------------------------------------------------
<!-- 打包成可执行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>