日期:2014-05-20  浏览次数:20663 次

小弟请教一个Javac中编译成功,但是java运行程序时报找不到类定义的错误问题?
是这样,我程序中调用了几个自己的jar包,我把要用的jar包放到了%JAVA_HOME%\jre\lib\ext下,编译通过了,但是运行时却报Exception in thread "main" java.lang.NoClassDefFoundError: ObtainOneMOMESSAGE (w
rong name: com/airinbox/sms/mt/client/sample/ObtainOneMOMESSAGE)
  at java.lang.ClassLoader.defineClass1(Native Method)
  at java.lang.ClassLoader.defineClass(Unknown Source)
  at java.security.SecureClassLoader.defineClass(Unknown Source)
  at java.net.URLClassLoader.defineClass(Unknown Source)
  at java.net.URLClassLoader.access$000(Unknown Source)
  at java.net.URLClassLoader$1.run(Unknown Source)
  at java.security.AccessController.doPrivileged(Native Method)
  at java.net.URLClassLoader.findClass(Unknown Source)
  at java.lang.ClassLoader.loadClass(Unknown Source)
  at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source)
  at java.lang.ClassLoader.loadClass(Unknown Source)
  at java.lang.ClassLoader.loadClassInternal(Unknown Source)错误,自己的jar包太多了,加到CLASSPATH太多了,个位兄台,有没有什么好的办法解决?高分求助!

------解决方案--------------------
classpath中直接指定到使用的jar包试试看?
------解决方案--------------------
在运行 java 命令时,在有 -jar 参数的情况下,会忽略 -classpath 参数,
也就是说你把 classpath 设好,也是没有用的。

放到 %java_home%/jre/lib/ext 下是一个解决方法,但不是最好的,因为只
有这一个程序能用到这些包,其他的程序用不到。

最好的方法是只给当前的程序使用,这样需要更改 MANIFEST.MF 文件,使用
WinRAR 把打开 jar 文件,在 META-INF 下,把 MANIFEST.MF 文件拿出来,
在这个文件的后面加上:

Class-Path: lib/xxx1.jar lib/xxx2.jar -- 把 jar 一个一个地手工写
上去中间用空格分开

最后保证 MANIFEST.MF 后面有两个空行。

将该 MANIFEST.MF 打包进 jar 中,生成 jar,在 jar 所在的目录下,新建
一个 lib 目录,把所有的 jar 拷进去,退至上层就大功告成了。

如果你使用 Ant 工具的话,就不用那么麻烦了,在类文件更改后,重建时还要
简单。
------解决方案--------------------
配置classpath要指定包名
<盘符>:\<路径>\<packagename.jar>
如:
E:\somepath\somepackage.jar
只有一个路径是没有用的