从Jar重新编译Java类

我有一个可执行jar,它有一个类值错误的类文件。 我向作者请求了该文件并更正了该值。

现在我想编译它并将编译后的类文件添加到jar中并运行它。

毫不奇怪,我为jar文件中的自定义对象的引用获得了多个“找不到符号”错误。

我尝试通过引用类路径中的jar文件来编译文件,就像这样

 C:/> javac file.java -classpath C:/ folder /其中/ jar /是

但这似乎没有用……我得到了同样的错误

 C:/> javac file.java

有没有办法编译这个单独的类以某种方式引用jar中的其他文件?

谢谢。


我在遵循以下一些建议时遇到的错误:

 javac -classpath C:/jar/location.jar File.java

 File.java:226:找不到符号
符号:类东西
 location:class com.shared.stuffers
                              东西s1 =新东西();
                                              ^

在Jar中找到了Stuff类,但javac程序无法看到…我觉得我做错了但不确定在哪里? 谢谢。

您将需要像这样编译您的文件:

javac -classpath C:\folder\where\jar\is\the_jar_file.jar file.java 

根据javac使用说明:

 C:\Console2>javac -help Usage: javac   

编译完新文件后(例如在Will先生的回答中),您可以使用以下命令将新文件添加到jar中:

 jar uf C:\folder\where\jar\is\the_jar_file.jar file.class 

您可能必须指定JAR文件本身而不仅仅是它所在的目录。

 javac file.java -classpath C:\folder\where\jar\is\the_jar_file.jar 

我只是在猜测,但你是否检查过它是否不需要你可能必须包含在编译命令中的任何外部jar库? 你可以做的另一件事是通过做类似的事情来编译所有的类

 javac *.java ... 

正如其他人所提到的,一旦重新编译了.class文件,就需要替换.jar中的旧版本

您可能需要有任何编译时依赖项来重建此类。 如果它是一个开源项目,这可能是一件容易的事情。 如果没有,那就更难了。 如果作者向您发送了该文件,他也可以帮助您。 您也许可以让作者为您生成修补的发行版。 可能性是他/她已经建立了构建环境,这应该相对容易。

我尝试这种方法(它应该工作,除非’debugged’类没有引入新的错误):

  1. 通过获取旧jar并删除要替换的类文件来创建一个新jar
  2. 编译更正的java文件,并确保修改后的jar在类路径上
  3. 将新编译的类文件添加到jar中

这应该工作。 如果不是 – 请求作者提供一个新的完整库。