簡體   English   中英

Jar文件:為什么提取然后壓縮jar文件創建一個與原始文件大小不同的文件?

[英]Jar files: why does extracting then compression a jar file create a file of a different size to the original?

我試圖在提取的Eclipse插件jar文件中編輯單個字節。 我注意到,在我將文件重新壓縮為jar后,生成的文件比原始文件大(只有1%)並且插件不起作用。 Eclipse已啟動,但在選擇工作區后靜默關閉。 回滾到原始插件允許它成功啟動。

然后我嘗試解壓縮,然后壓縮插件(不更改任何東西),生成的jar文件仍然比原始文件大,並且也無法正常工作。

$ jar -xf temp/in.jar

然后

$ jar -cf out.jar temp/*

$ du in.jar out.jar
4216    in.jar
4236    out.jar

我想這可能是由於時間戳被改變了,但我不認為這會阻止eclipse接受它。

所以我的問題是:有沒有辦法解壓縮一個jar,更改一個字節,然后在不改變jar的情況下壓縮它?

我正在使用Ubuntu 10.04 - 64位:

Linux user 2.6.32-38-generic #83-Ubuntu SMP Wed Jan 4 11:12:07 UTC 2012 x86_64 GNU/Linux

查看jar表時,似乎有不同的順序:

$ jar tf in.jar | head -n 5
META-INF/
META-INF/MANIFEST.MF
com/
com/android/
com/android/ide/

$ jar tf out.jar | head -n 5
META-INF/
META-INF/MANIFEST.MF
about.html
about.ini
about.properties

有沒有辦法在罐子里以不同的方式訂購它們?

如果修改了一個文件,則在重新壓縮后獲取不同的大小是正常的。 但是如果沒有修改任何內容,也許你在兩個檔案中都沒有相同的根目錄。

運行以下兩個命令並在此處發布結果(僅限第一行):

jar tf in.jar
jar tf out.jar

這些命令列出Jar文件中的所有文件及其路徑。

您是否嘗試使用以下命令僅更新修改的文​​件:

jar uf in.jar TheFileYouModified

TheFileYouModified必須與JAR文件中的路徑相同。 例如,替換你在/ tmp / injar /中提取的com / android / Example.class並修改:

jar uf in.jar -C /tmp/injar com/android/Example.class

暫無
暫無

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

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