现在我想在程序中动态将别的程序打成jar文件并运行
假设程序安装在d:\code中,文件是code.jar
现在出现了奇怪的问题
在cmd下
当前目录为D:\code时,运行jar cvfm code.jar manifest.mf *.class打出来的jar文件用
java -jar code.jar运行正常但是在其他任意目录下,运行jar cvfm d:\code\code.jar d:\code\manifest.mf d:\code\*.class
这样也能产生一jar文件,但是运行的话错误提示:
Exception in thread "main" java.lang.NoClassDefFoundError: code这是为什么啊!!!
因为我在程序里动态产生jar文件的话,一定需要用绝对路径的啊!
谁知道打包出来的不能运行!是不是manifest.mf写得不对啊
我写得是:
Main-Class: code
是不是这里要写绝对路径?可是这儿得绝对路径怎么写啊!写成上面那种又要出错!

解决方案 »

  1.   

    ^_^你看一下你在其他目录生成的那个jar文件的目录你就明白为什么会错误提示了!
      

  2.   

    你用什么东西打Jar的啊,何为动态?
    用Ant的?
      

  3.   

    手动打包建议用以下命令:jar cf xx.jar [目录]/包名!!
      

  4.   

    不是,我估计你打的jar包应该是没有错误的,只不过是你运行这个jar包时设置的路径不对。
    比如你的jar在d:\code下,而你在c:\下用java -jar code.jar,当然是会报上面的那个异常了,很明显,没有找到类嘛。
      

  5.   

    我的意思是:
    在cmd下
    当前目录为D:\code时,运行jar cvfm code.jar manifest.mf *.class打出来的jar文件在d:\code目录下用:
    java -jar code.jar运行正常但是在其他任意目录下,运行jar cvfm d:\code\code.jar d:\code\manifest.mf d:\code\*.class
    在d:\code下产生code.jar文件,但是在d:\code下运行java -jar code.jar的话错误提示:
    Exception in thread "main" java.lang.NoClassDefFoundError: code
    更不要说在其他目录下了啊!不知道你们谁试一下呢看看是不是这样啊!
      

  6.   

    我的目的是在程序里打包并执行其他程序啊!可是在程序里
            String[] cmd = {"jar", "cvfm",.....};  //连接成打包命令的字符串
            Process process = Runtime.getRuntime().exec(cmd);
    这样打包的话看来必须用绝对路径啊!(可以不用绝对路径吗?)而用绝对路径的话就产生以上问题啊!
      

  7.   

    ^_^,楼主,我给你发消息了! 
    还有 你看一下这篇文章把!会对你有帮助的 !http://blog.csdn.net/gqy789/archive/2005/08/12/452024.aspx
      

  8.   

    Main-Class: code难道你都是放在default包里的?
      

  9.   

    对啊用绝对路径生成的jar文件,用winrar打开里面的code.class不是放在根目录下而是在一个d:的文件夹里!为什么啊!有没有什么解决方法啊!
      

  10.   

    那么可不可以在用java -jar命令运行的时候,指定jar包里的指定目录呢????
      

  11.   

    jar cvfm d:\code\code.jar d:\code\manifest.mf -C d:\  code在其他目录这样打包就可以了 !注意命令间的空格,还有那个是大写的C
      

  12.   

    jar cvfm d:\code\code.jar d:\code\manifest.mf -C d:\  code是可以打包!可是打包时候出现ZipException 打出来的.jar也不能运行说有致命错误!
      

  13.   

    jar cvfm d:\code\code.jar d:\code\manifest.mf -C d:\  code而且这样怎么表示多个.class文件呢??PS:我注意到了空格了!!!
      

  14.   

    efrrf===============================
        CSDN小助手 是一款脱离浏览器也可以使用csdn论坛的
    软件!
        界面: http://qqwwee.com/
        下载: http://qqwwee.com/csdn.rar 包含源代码
      

  15.   

    ^_^,我知道你那错了! 不要把包打到d:\code\这个目录下 ! 
    你打到d:\ 试一下 !
      

  16.   

    jar cvfm d:\code.jar d:\code\manifest.mf -C d:\  code
    这样吗??不行啊!!
    打出来还是不能运行!!
      

  17.   

    那你这样吧,把那个manifest.mf 文件也移到d;\下,再打包!
    jar cvfm d:\code.jar d:\manifest.mf -C d:\  code
      

  18.   

    还是不行啊
    这样打出来的.class文件不在.jar文件内的根目录下而是在code文件夹下!
      

  19.   

    那就这样了!
    jar cvfm d:\code.jar d:\manifest.mf -C d:\code \看好空格!
      

  20.   

    jar cvfm d:\code.jar d:\manifest.mf -C d:\code \
    是这样 !
      

  21.   

    这样是可以了可是似乎限制好多啊!manifest.mf要放在d:\下
    生成也只能生成在d:\下!没办法都放在本身的目录下吗???