7

我有一个可执行 jar,其中有一个值错误的类文件。我向作者索要该文件并更正了该值。

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

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

我试图通过引用类路径中的 jar 文件来编译文件,如下所示

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

但这似乎不起作用......我得到的错误就像只是在做一样

C:/> javac 文件.java

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

谢谢。


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

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

File.java:226:找不到符号
符号:类东西
位置:类 com.shared.stuffers
                              材料 s1 = 新材料();
                                             ^

在 Jar 中找到了 Stuff 类,但 javac 程序看不到...我觉得我做错了什么但不知道在哪里?谢谢。

4

6 回答 6

16

您将希望像这样编译您的文件:

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

根据 javac 使用说明:

C:\Console2>javac -help
Usage: javac <options> <source files>
于 2009-06-03T17:43:16.330 回答
9

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

jar uf C:\folder\where\jar\is\the_jar_file.jar file.class
于 2009-06-03T17:53:50.583 回答
0

我会尝试这种方法(它应该可以工作,除非“调试”类没有引入新错误):

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

这应该有效。如果没有,请向作者索要一个新的完整库。

于 2009-06-03T21:14:02.893 回答
0

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

javac file.java -classpath C:\folder\where\jar\is\the_jar_file.jar
于 2009-06-03T17:38:16.120 回答
0

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

javac *.java ...
于 2009-06-03T17:45:19.960 回答
0

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

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

于 2009-06-03T17:58:11.150 回答