从jar中提取文件后,如何将它们重新组合成一个有效的jar?

时间:2012-07-21 04:34:42

标签: java jar manifest executable-jar manifest.mf

我从dacapo基准jar中提取文件。

jar -xf dacapo-2006-10-MR2.jar

然后,我得到了这个文件夹

dacapo-2006-10-MR2

我试图以这种方式将它们重新组合在一起:

jar cmf dacapo-2006-10-MR2/META-INF/MANIFEST.MF my-dacapo.jar dacapo-2006-10-MR2

但是当我尝试使用新jar时出现错误:

java -jar my-dacapo.jar -s small antlr

Exception in thread "main" java.lang.NoClassDefFoundError: Harness
Caused by: java.lang.ClassNotFoundException: Harness
    at java.net.URLClassLoader$1.run(URLClassLoader.java:217)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.net.URLClassLoader.findClass(URLClassLoader.java:205)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:321)
    at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:294)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:266)
Could not find the main class: Harness. Program will exit.

我不熟悉jar文件。谁有人帮我一个忙?谢谢!

@Bohemian看来你的解决方案在这里没有用,见下文

> zip -r my-dacapo dacapo-2006-10-MR2
> mv my-dacapo.zip my-dacapo.jar
> java -jar my-dacapo.jar -s small antlr

Invalid or corrupt jarfile my-dacapo.jar

非常感谢。

4 个答案:

答案 0 :(得分:2)

jar只是一个压缩文件,扩展名为“.jar”

压缩文件并将.zip重命名为.jar

答案 1 :(得分:0)

首先转到解压缩该文件的目录。然后写入命令。

jar cvf(你要插入的类).class(或你要插入的文件夹)

它将生成可执行jar文件

答案 2 :(得分:0)

如果您使用eclipse,可以按照这些stepscreate manifest

来获取您的jar

此外,您可能需要阅读this(您可能没有在清单文件中定义主类)

答案 3 :(得分:0)

Jar工具提供了一个 u 选项,您可以通过修改其清单或添加文件来更新现有JAR文件的内容。

添加文件的基本命令具有以下格式:

jar uf jar-file input-file

在此命令中:

  • u 选项表示您要更新现有JAR 文件

  • f 选项表示要指定要更新的JAR文件 在命令行上。

  • jar-file 是要更新的现有JAR文件。

  • 输入文件是您要添加到JAR文件的一个或多个文件的空格分隔列表。

存档中已存在的文件与添加的文件具有相同的路径名将被覆盖。

更多细节:https://docs.oracle.com/javase/tutorial/deployment/jar/update.html