繁体   English   中英

从Jar重新编译Java类

[英]Re-compile a Java Class from Jar

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

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

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

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

C:/> javac  file.java  -classpath C:/folder/where/jar/is

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

C:/> javac file.java

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

谢谢。


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

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

File.java:226: cannot find symbol
symbol  : class Stuff
location: class com.shared.stuffers
                              Stuff s1 = new Stuff();
                                             ^

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

您将要编译您的文件,如下所示:

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

根据javac使用说明:

C:\Console2>javac -help
Usage: javac <options> <source files>

编译完新文件后(例如在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中

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM