簡體   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