请输入您要查询的百科知识:

 

词条 Retroweaver
释义

Retroweaver是一款代码转换工具,它允许你在Java代码中使用Java 5的语言特性,却能让其运行在jdk 1.4(或更早版本)的虚拟机上,Retroweaver操作的对象是Java 5编译过的class文件,然后将其转换成为可以在之前版本的Java虚拟机上运行的class文件,Retroweaver是跨平台的,你不需要有这此担心。下面让我们看看如何在实际开发中使用Retroweaver。

Retroweaver安装

首先从下载Retroweaver开发包,也就是retroweaver-all.jar文件,下载后解压即可。这里对解压的目录做一个说明,docs是文档目录;lib目录包含第三方开发包,Retroweaver在执行代码转换时需要用到这些开发包,这些开发包仅在转换时用到,在部署、运行时都不需要;release目录包含以下几个文件:转换后代码运行时所需的retroweaver-rt.jar文件,该文件6K不到,你只需将其加入到运行程序的CLASSPATH中即可;retroweaver.jar则是运行转换时所需的程序包;retroweaver-ex.jar则是一个提供了图形界面的应用程序,你可以使用该程序提供的界面执行转换操作。

Retroweaver使用

首先你的开发不受任何打扰,你使用钟爱的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文件即可。

Retroweaver介绍

Retroweaver 是一个JAVA字节码组织器,它能够让你用java1.4的虚拟机来运行用1.5的新特性所编写Class.Retroweaver的操作是把用1.5编译器编译的Class文件转换成可以在任何1.4虚拟机上运行Class文件.

Retroweaver 包含两个逻辑组件:一个字节码增强器和一个运行时库。字节码增强器使用 classworking 技术来修改由 JDK 5.0 编译器生成的类文件,使得这些类可以用于旧版 JVM。作为类文件修改的一部分,Retroweaver 可能需要替换对添加到 J2SE 5.0 中的标准类的引用。实际的替换类包含在运行时库中,以便在您执行修改过的代码时它们是可用的。

按照标准开发周期来说,字节码增强器需要在 Java 代码编译之后、类文件为部署而打包之前运行。在您使用一个 IDE 时,该更改是一个问题 ——“集成”一个类转换工具到“开发环境”是很痛苦的事情,因为 IDE 一般假设它们拥有类文件。限制这一痛苦的一种方式是,只对 IDE 中的大多数测试使用 JDK 5.0。这样,您只需要在想要为部署打包文件或者想要测试实际的部署 JVM 时转换类文件。如果使用 Ant 风格的构建过程,就没有问题;只添加 Retroweaver 字节码增强器作为编译之后的一个步骤。

Retroweaver 具有一个小小的限制:尽管 Retroweaver 允许您在运行在旧版 JVM 上的代码中使用 J2SE 5.0 语言特性,但是它并不支持也包含在 J2SE 5.0 中的所有添加到标准 Java 类的特性。如果您的代码使用任何添加到 J2SE 5.0 中的类或方法,那么就将在试图加载旧版 JVM 中的代码时得到错误,哪怕是在 Retroweaver 处理完成之后也如此。避免对标准库的 J2SE 5.0 添加不应该是一个主要问题,但是如果使用 IDE 中的感应弹出特性并偶然挑选了一个仅添加到 J2SE 5.0 中的方法或类,它就有可能让您得到错误。

J2SE 5.0 的更改既发生在 JVM 中,也发生在实际的 Java 语言,但是 JVM 更改相当小。有一个新的字符可以用于字节码中的标识符中 ("+"),一些处理类引用的指令发生了修改,还有一个不同的方法用于处理合成组件。 Retroweaver 在字节码增强步骤中处理这些 JVM 更改,方法是把这些更改返回原样,即替换成用于 J2SE 5.0 之前相同目的的方法(比如标识符中的 + 字符,就是用 $ 取代它)。

包含在 J2SE 5.0 中的语言更改要稍微复杂一点。一些最有趣的更改,比如增强的 for 循环,基本上只是语法更改,即为表示编程操作提供快捷方式。比如泛型更改 —— 泛型类型信息 —— 由编译器用于实施编译时安全,但是生成的字节码仍然到处使用强制转换。但是大多数更改使用了添加到核心 Java API 中的类或方法,所以您不能直接使用为 JDK 5.0 生成的字节码并将它直接运行在早期的 JVM 上。Retroweaver 为支持 J2SE 5.0 语言更改所需的新类提供其自己的等价物,并且用对其自己的类的引用替换对标准类的引用,这是字节码增强步骤的一部分。

Retroweaver 字节码增强不能对所有的 J2SE 5.0 语言更改提供完全支持。例如,没有对处理注释的运行时支持,因为运行时支持涉及到对基本 JVM 类加载器实现的更改。但是一般来说,只是不支持那些不会影响普通用户的小特性。

随便看

 

百科全书收录4421916条中文百科知识,基本涵盖了大多数领域的百科知识,是一部内容开放、自由的电子版百科全书。

 

Copyright © 2004-2023 Cnenc.net All Rights Reserved
更新时间:2025/3/19 16:58:26