从Jar重新编译Java类

时间:2009-06-03 17:36:03

标签: java jar compilation classpath

我有一个可执行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程序无法看到...我觉得我做错了但不确定在哪里?感谢。

6 个答案:

答案 0 :(得分:16)

您需要像这样编译文件:

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

根据javac使用说明:

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

答案 1 :(得分:9)

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

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

答案 2 :(得分:0)

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

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

答案 3 :(得分:0)

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

的操作来编译所有类
javac *.java ...

答案 4 :(得分:0)

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

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

答案 5 :(得分:0)

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

  1. 通过旧的创建一个新的jar 一,并删除该类文件 你想要替换
  2. 编译 更正了java文件并确保 修改后的罐子就在 类路径
  3. 添加新编译的 jar文件的类文件
  4. 这应该有效。如果不是 - 请求作者提供一个新的完整库。