我有一个jar包,叫:sign.jar,我在cmd窗口中执行javaw -jar sign.jar没问题,我解压出来后修改了这个sign.jar里面的一个配置文件的一个属性,然后再用jar cvf sign.jar . 压缩还原为sign.jar,等我再去象这样子执行javaw -jar sign.jar的时候,却报错:Failed to load Main-Class manifest attribute from sign.jar,刚开始我以为是我修改了里面的配置文件才导致这个错,于是我把以前那个可以正常运行的sign.jar包再重新解压出来,然后什么都不修改,仍然使用jar cvf sign.jar .压缩产生一个sign.jar,我再来运行这个sign.jar,奇怪的是还是报:Failed to load Main-Class manifest attribute from sign.jar这个错,我可什么都没修改啊,只是进行了一次 压缩和解压操作.这是什么原因啊??

解决方案 »

  1.   

    你的命令格式写错了,在cmd下输入jar 回车看看就知道了
      

  2.   

    使用不带任何的 jar 命令我们可以看到 jar 命令的用法如下:   jar {ctxu}[vfm0M] [jar-文件] [manifest-文件] [-C 目录] 文件名 ...   其中 {ctxu} 是 jar 命令的子命令,每次 jar 命令只能包含 ctxu 中的一个,它们分别表示:   -c 创建新的 JAR 文件包 
      -t 列出 JAR 文件包的内容列表 
      -x 展开 JAR 文件包的指定文件或者所有文件 
      -u 更新已存在的 JAR 文件包 (添加文件到 JAR 文件包中)   [vfm0M] 中的选项可以任选,也可以不选,它们是 jar 命令的选项参数   -v 生成详细报告并打印到标准输出 
      -f 指定 JAR 文件名,通常这个参数是必须的 
      -m 指定需要包含的 MANIFEST 清单文件 
      -0 只存储,不压缩,这样产生的 JAR 文件包会比不用该参数产生的体积大,但速度更快 
      -M 不产生所有项的清单(MANIFEST〕文件,此参数会忽略 -m 参数   [jar-文件] 即需要生成、查看、更新或者解开的 JAR 文件包,它是 -f 参数的附属参数 
      [manifest-文件] 即 MANIFEST 清单文件,它是 -m 参数的附属参数   [-C 目录] 表示转到指定目录下去执行这个 jar 命令的操作。它相当于先使用 cd 命令转该目录下再执行不带 -C 参数的 jar 命令,它只能在创建和更新 JAR 文件包的时候可用。 
      文件名 ... 指定一个文件/目录列表,这些文件/目录就是要添加到 JAR 文件包中的文件/目录。如果指定了目录,那么 jar 命令打包的时候会自动把该目录中的所有文件和子目录打入包中。   下面举一些例子来说明 jar 命令的用法:   1) jar cf test.jar test   该命令没有执行过程的显示,执行结果是在当前目录生成了 test.jar 文件。如果当前目录已经存在 test.jar,那么该文件将被覆盖。   2) jar cvf test.jar test   该命令与上例中的结果相同,但是由于 v 参数的作用,显示出了打包过程,如下:   标明清单(manifest) 
      增加:test/(读入= 0) (写出= 0)(存储了 0%) 
      增加:test/Test.class(读入= 7) (写出= 6)(压缩了 14%)   3) jar cvfM test.jar test   该命令与 2) 结果类似,但在生成的 test.jar 中没有包含 META-INF/MANIFEST 文件,打包过程的信息也略有差别:   增加:test/(读入= 0) (写出= 0)(存储了 0%) 
      增加:test/Test.class(读入= 7) (写出= 6)(压缩了 14%)   4) jar cvfm test.jar manifest.mf test   运行结果与 2) 相似,显示信息也相同,只是生成 JAR 包中的 META-INF/MANIFEST 内容不同,是包含了 manifest.mf 的内容   5) jar tf test.jar   在 test.jar 已经存在的情况下,可以查看 test.jar 中的内容,如对于 2) 和 3) 生成的 test.jar 分别应该此命令,结果如下;   对于 2)   META-INF/ 
      META-INF/MANIFEST.MF 
      test/ 
      test/Test.class   对于 3)   test/ 
      test/Test.class   6) jar tvf test.jar   除显示 5) 中显示的内容外,还包括包内文件的详细信息,如:      0 Wed Jun 19 15:39:06 GMT 2002 META-INF/ 
        86 Wed Jun 19 15:39:06 GMT 2002 META-INF/MANIFEST.MF 
         0 Wed Jun 19 15:33:04 GMT 2002 test/ 
         7 Wed Jun 19 15:33:04 GMT 2002 test/Test.class   7) jar xf test.jar   解开 test.jar 到当前目录,不显示任何信息,对于 2) 生成的 test.jar,解开后的目录结构如下:   == 
      |-- META-INF 
      |  `-- MANIFEST 
      `-- test 
        `-- Test.class   8) jar xvf test.jar   运行结果与 7) 相同,对于解压过程有详细信息显示,如:    创建:META-INF/ 
      展开:META-INF/MANIFEST.MF 
       创建:test/ 
      展开:test/Test.class   9) jar uf test.jar manifest.mf   在 test.jar 中添加了文件 manifest.mf,此使用 jar tf 来查看 test.jar 可以发现 test.jar 中比原来多了一个 manifest。这里顺便提一下,如果使用 -m 参数并指定 manifest.mf 文件,那么 manifest.mf 是作为清单文件 MANIFEST 来使用的,它的内容会被添加到 MANIFEST 中;但是,如果作为一般文件添加到 JAR 文件包中,它跟一般文件无异。   10) jar uvf test.jar manifest.mf   与 9) 结果相同,同时有详细信息显示,如:   增加:manifest.mf(读入= 17) (写出= 19)(压缩了 -11%) 
      

  3.   

    jar cvf sign.jar
    你这个命令控制台没提示你有问题?
      

  4.   

    jar cvf sign.jar ./你要的打包的文件
      

  5.   

    jar uvmf A.jar menifesto.mf *.class 这样就可以打成一个jar包了。双击可以运行的。不地过lz的情况我也是不明白。望高人赐教.
      

  6.   

    LZ您解压 用
    jar xvf *.jar
    压缩使用
    jar cvf sign.jar *.class 等等等等
      

  7.   

    jar cvf sign.jar 这个运行成功????没有写要打包文件呀
      

  8.   

    解压的时候会不会漏文件啊.解压后再压缩,jar文件大小跟原来一样吗?
      

  9.   

    何必解压呢?直接用rar把jar打开,然后把配置文件拖进去就可以了
      

  10.   

    谢谢大家,问题解决了,我按照楼上的做法试了一遍,就是把改好了的配置文件直接拖到用rar打开的jar包中就好了(注意:如果这个jar已经在运行,就先在"任务管理器"中把进程javaw.exe结束掉,不然你脱进去的文件是无法加入到jar包中的,会报错:另一个程序正在使用此文件,进程无法访问.)