编译孤立的java文件

时间:2014-10-21 19:01:09

标签: java jar compilation compatibility .class-file

我需要修补一些旧版本的Java软件。问题是在旧版本中重建整个包将非常困难,因为它是一个非常复杂的程序。

我有更正的源文件。有没有办法将这一个文件编译成一个类文件,然后将其插入到jar中,或者我是否必须拥有每个源文件?

更新 - 如何进行Java修补程序

使用Elliott Frisch的回答我能够制作补丁。这是命令行:

javac -target 1.5 -source 1.5 -cp original.jar;otherlib.jar CorrectedSource.java

所以,总结一下。您指定Java的目标版本并将源设置为匹配,包括原始jar(和任何lib)作为类路径,然后最终命名要编译的源代码。然后,您可以获取生成的类文件并将其插入jar中,替换旧的类文件。

To find out the target version of your class file

2 个答案:

答案 0 :(得分:3)

如果只重新编译那个文件

,它应该可以工作
  1. 您使用相同的-target <release>,每javac -help 为特定的VM版本生成类文件,我相信您需要匹配原始版本。
  2. 使用在 1 中生成的新类文件替换jar文件中旧类的版本。请先备份 原始 Jar文件。

答案 1 :(得分:1)

  1. 使用target <release>编译源文件,以确保它与编译旧jar的版本相同。
  2. filename.jar重命名为filename.zip
  3. 解压缩.zip档案
  4. .class文件替换为新文件
  5. 重新压缩存档。可以使用压缩。确保目录结构与原来的相同,并且包含META-INF目录。
  6. 再次将文件重命名为filename.jar
  7. 注意:校验和会有所不同。一些可执行的jar检查这个,其他的则不检查。 YMMV