Jar文件:为什么提取然后压缩jar文件创建一个与原始文件大小不同的文件?

时间:2012-03-07 15:48:01

标签: java eclipse ubuntu jar eclipse-plugin

我试图在提取的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

有没有办法在罐子里以不同方式订购它们?

1 个答案:

答案 0 :(得分:3)

如果修改了一个文件,则在重新压缩后获得不同的大小是正常的。但是如果没有修改任何内容,也许你们在两个档案中都没有相同的根目录。

运行以下两个命令并在此处发布结果(仅限第一行):

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