如果你有这个类的来源,那么我的方法是:
- 获取 JAR 文件
- 获取单个类的源代码
- 在类路径上使用 JAR 编译源代码(这样,您就不必编译其他任何内容;JAR 已经包含二进制文件并没有什么坏处)。您可以使用最新的Java版本;只需使用 和 降级编译器即可。
-source
-target
- 将 JAR 中的类文件替换为新的 using 或 Ant 任务
jar u
Ant 任务示例:
<jar destfile="${jar}"
compress="true" update="true" duplicate="preserve" index="true"
manifest="tmp/META-INF/MANIFEST.MF"
>
<fileset dir="build/classes">
<filter />
</fileset>
<zipfileset src="${origJar}">
<exclude name="META-INF/*"/>
</zipfileset>
</jar>
在这里,我还更新了清单。首先放置新类,然后添加原始 JAR 中的所有文件。 将确保新代码不会被覆盖。duplicate="preserve"
如果代码未签名,则当新字符串与旧字符串具有完全相同的长度时,您也可以尝试替换字节。Java 对代码执行一些检查,但.class文件中没有校验和。
您必须保留长度;否则类装入器会感到困惑。