簡體   English   中英

如何重新編譯 jar 文件?

[英]How do you recompile a jar file?

我拿了一個舊的 jar 文件並對其進行了編輯。 現在我有一個包含所有文件的文件夾,我想將它們重新編譯回 jar 文件。 我該怎么做呢?

Jar文件不是正常意義上的“編譯”。 但是你只需用jar命令創建一個:

jar cvf myfile.jar file1 file2 etc

您可以正常使用globbing:

jar cvf ../myfile.jar *

運行jar -? 或閱讀文檔以獲取更多信息。

請注意,對於可執行jar文件,您還需要指定清單文件。

你是怎么編輯的?

無論如何, jar文件遵循與常規zip文件相同的格式。 如果你想更新jar的內容(可能有一個新文件),你可以這樣做:

jar -uf yourJar.jar  path/to/updated/Class.class 

那將使用文件path/to/updated/Class.class更新你的jar path/to/updated/Class.class如果在該路徑中已經有一個具有該名稱的類,它將被替換。 如果不是它將被創建。

在此之后你的罐子是最新的。

Jar文件通常包含已編譯的java文件(類文件)和資源。 如果允許您對此jar進行更改,則可以使用JAD反匯編類文件,並在重新編譯后使用命令jar再次組裝它們

你是如何編輯jar文件,hex編輯器的?

jar文件只是一個帶有一些額外文件的zip文件。 您可以使用任何zip實用程序來重新加入未加工的jar文件。

由於我無法完全重新編譯 .jar 文件並使用我的應用程序,因此我想在這里分享之前答案中缺少的步驟。

在我的具體情況下,為了使事情盡可能簡單,我只想修改反編譯結果中的一個.java文件,並直接在.jar文件中進行更新。

我從Paulo Ebermann對類似問題回答開始,最終得到:

javac -source 8 -target 8 -d classdir -cp \
"\
path/to/dep1.jar; \
path/to/dep2.jar; \
path/to/myoriginal.jar \
" path/to/my/java/class.java

cd classdir
jar -uf path/to/myoriginal.jar path/to/my/java/class.class

筆記:

  • path/to/myoriginal.jar位於依賴項的路徑中,這會強制 java 編譯器在 original.jar 中查找丟失的類,而不是在本地文件中重新編譯和編譯更多依賴項和代碼因此我故意省略了. class 路徑列表中的路徑
  • -source 8 -target 8是強制 class 為適當版本的運行時機器編譯所需的。
  • -uf表示 jar 工具應僅使用提供的 class 更新文件

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM