4

我从 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

4 回答 4

2

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

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

于 2012-07-21T04:42:39.007 回答
1

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

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

jar uf jar-file 输入文件

在这个命令中:

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

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

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

  • input-file(s)是要添加到 JAR 文件中的一个或多个文件的空格分隔列表。

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

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

于 2017-12-15T08:13:49.677 回答
0

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

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

它将生成可执行的jar文件

于 2012-07-21T04:47:43.023 回答
0

如果您使用 eclipse,您可以按照以下步骤获取您的 jar并创建清单

你也可能需要阅读这个(你可能没有在清单文件中定义你的主类)

于 2012-07-21T04:59:45.237 回答