论坛首页 Java企业应用论坛

jdk1.5的类转换成jdk1.4的类文件

浏览 6076 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
作者 正文
   发表时间:2007-10-13  
OO
  搞了一个晚上终于搞出来了,把jdk1.5环境下的类文件编译成1.4环境下的类文件,我使用的是Retrotranslator-1.2.2。使用Ant编译依赖三个jar文件,retrotranslator-transformer-1.2.2.jar,retrotranslator-runtime-1.2.2.jar,backport-util-concurrent-3.0.jar。
  具体请看Ant配置,如下:
  首先是路径配置,文件名为:build-dist.properties
#jdk1.4路径
jdk14_home=C:/j2sdk1.4.2_05

#当前路径
Retrotranslator.dir = .
#1.4的class文件路径
Retrotranslator.src.dir = ${Retrotranslator.dir}/src
#jar文件路径
Retrotranslator.jar.dir = ${Retrotranslator.dir}/jar
#生成的jar文件或者1.4的class文件的路径
Retrotranslator.dist.dir = ${Retrotranslator.dir}/dist

   然后是build文件,文件名为:buildRetrotranslator.xml
   配置好Ant环境,使用命令ant -f buildRetrotranslator.xml [任务名,不加则为默认],如果文件名为build.xml,则使用ant [任务名,不加则为默认]。
<?xml version="1.0" encoding="UTF-8"?>
<project name="Retrotranslator" default="jdk14jar">

	<property file="build-dist.properties"/> 
	
	<path id="compile.classpath">
		<fileset dir="${Retrotranslator.dir}">
			<include name="**/*.jar"/>
		</fileset>
	</path>
	
	<!-- 初始化任务 -->
	<target name="init">
		<mkdir dir="${Retrotranslator.dist.dir}"/>
		<taskdef name="retrotranslator" classpathref="compile.classpath"
		             classname="net.sf.retrotranslator.transformer.RetrotranslatorTask" />
	</target>
	
	<!-- 把jdk1.5的类文件编译成jdk1.4的class文件 -->
	<target name="jdk14src" depends="init">
	    <retrotranslator destdir="${Retrotranslator.dist.dir}" verify="true">
	     	<!-- 包含class文件,并换成1.4的class文件-->
	    	<fileset dir="${Retrotranslator.src.dir}" includes="**/*.class"/>
	    	<!-- 包含jar文件,直接转换成1.4的class文件-->
        <jarfileset dir="${Retrotranslator.src.dir}" includes="**/*.jar"/>
        <classpath location="${jdk14_home}/jre/lib/rt.jar"/>
        <classpath refid="compile.classpath"/>
	    </retrotranslator>
	</target>
	
	<target name="jdk14jar" depends="init">
		<!-- 直接把jar文件转换成1.4的jar文件-->
		<retrotranslator srcjar="${Retrotranslator.jar.dir}/jasperreports-1.2.5.jar"
			destjar="${Retrotranslator.dist.dir}/jasperreports-1.2.5-jdk14-2.jar" verify="true">
			<classpath location="${jdk14_home}/jre/lib/rt.jar"/>
			<classpath refid="compile.classpath" />
		</retrotranslator>
	</target>
</project>
  • 大小: 723.1 KB
   发表时间:2007-10-13  
疑问:JDK5编译的所有class都不能在jdk4上运行么?
0 请登录后投票
   发表时间:2007-10-13  
默认是不可以的
因为class文件头上有版本号
5的更高一些,所以JDK4是不能运行的

不过可以通过JDK5的编译开关 强制编译成1.4的

额外加一句,即使使用强制编译成1.4也有可能运行不了
比如你调用了JDK1.5的某些新类或者新方法,就有可能运行不了
因为1.4上没有相应的类或者方法
0 请登录后投票
   发表时间:2007-10-14  
如果使用eclipse的话,可以编译成你要的版本,不过只能向下兼容,就是1.5的可以编译成1.4的,不能编译成1.6的。

如果已经编译好的类的话,就没有办法了,只有使用反编译,然后重新编译java文件,这里是直接转换class文件。
0 请登录后投票
   发表时间:2008-07-23  
哈哈哈哈~~~~没想到在你这里找到我想要的了...官方网站没办法下载...郁闷~~~~~
0 请登录后投票
   发表时间:2008-07-24  
你好像把这个搞复杂了。Struts2默认好像就附带这个包。
先把在jdk5下开发的类打包成jar文件,然后在命令行就可以直接转化为jdk1.4版本的jar。
这个以前用过,试过可以。但不太感用,只要是怕有bug,然后调试不太方便。
0 请登录后投票
论坛首页 Java企业应用版

跳转论坛:
Global site tag (gtag.js) - Google Analytics