【问题标题】:Re-compile a Java Class from Jar从 Jar 重新编译 Java 类
【发布时间】:2010-10-31 01:42:50
【问题描述】:

我有一个可执行 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 程序看不到...我感觉我做错了什么但不知道在哪里?谢谢。

【问题讨论】:

  • 丛林人,你这个黑客!哪个作者会给你源代码,而不是为你重新编译所有东西?
  • Cheeso,回答你的问题? -- 希望他的代码接受手术的作者 --> 但我远离黑客,但不介意黑客攻击

标签: java jar compilation classpath


【解决方案1】:

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

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

【讨论】:

    【解决方案2】:

    你会想要像这样编译你的文件:

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

    根据 javac 使用说明:

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

    【讨论】:

    • 感谢您的建议 --- 但问题仍然存在 :(
    • 基本目录 (.) 丢失。命令应该是 javac -classpath .;C:\folder\where\jar\is\the_jar_file.jar file.java
    【解决方案3】:

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

    javac *.java ...
    

    【讨论】:

      【解决方案4】:

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

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

      【讨论】:

        【解决方案5】:

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

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

        【讨论】:

          【解决方案6】:

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

          1. 用旧的 jar 创建一个新的 一并删除类文件 你想替换
          2. 编译 更正了 java 文件并确保 修改后的 jar 在 类路径
          3. 添加新编译的 类文件到 jar 中

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

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2014-12-05
            • 1970-01-01
            • 2012-03-23
            • 2016-12-05
            • 1970-01-01
            • 2021-02-20
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多