首页 ┆ 网站地图 ┆ 在线留言 ┆ 游戏资讯 ┆ 资源下载  ┆ 端午节祝福 
设为首页
加入收藏
联系我们
热门关键字: .net应用  操作系统  Dreamweaver  WinRAR  网络推广
高级搜索
您当前的位置: 主页>JAVA专区>J2SE>jar文件运行中发生ClassNotFound问题的解决方案
jar文件运行中发生ClassNotFound问题的解决方案
来源: 发布时间:2008-06-10 发布人: 浏览: 人次   字体: [ ]  

1 今天彻底测试了jar程序,却发现了ClassNotFound的错误,下面就说一下如果遇到这个问题后的解决方案吧
TestJar.java
package net.java2000.test.jar;

import javax.swing.JOptionPane;

import org.springframework.beans.factory.BeanFactory;
import org.springframework.context.support.ClassPathXmlApplicationContext;

public class TestJar {
  private String message;
  public String getMessage() {
    return message;
  }
  public void setMessage(String message) {
    this.message = message;
  }
  /**
   * @param args
   */
  public static void main(String[] args) {
    BeanFactory beanFactory = new ClassPathXmlApplicationContext(new String[] { "applicationContext.xml" });
    TestJar obj = (TestJar) beanFactory.getBean("TestJar");
    System.out.println(obj.getMessage());
    JOptionPane.showMessageDialog(null, "Jar内容", "Jar标题", JOptionPane.OK_OPTION);
  }
}

applicationContext.xml
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xmlns:aop="http://www.springframework.org/schema/aop"
  xmlns:tx="http://www.springframework.org/schema/tx"
  xsi:schemaLocation="http://www.springframework.org/schema/beans <A href="http://www.springframework.org/schema/beans/spring-beans-2.0.xsd" target=_blank>http://www.springframework.org/schema/beans/spring-beans-2.0.xsd</A>
            <A href="http://www.springframework.org/schema/aop" target=_blank>http://www.springframework.org/schema/aop</A> <A href="http://www.springframework.org/schema/aop/spring-aop-2.0.xsd" target=_blank>http://www.springframework.org/schema/aop/spring-aop-2.0.xsd</A>
            <A href="http://www.springframework.org/schema/tx" target=_blank>http://www.springframework.org/schema/tx</A> <A href="http://www.springframework.org/schema/tx/spring-tx-2.0.xsd" target=_blank>http://www.springframework.org/schema/tx/spring-tx-2.0.xsd</A>">
  <bean id="TestJar" class="net.java2000.test.jar.TestJar">
    <property name="message">
      <value>Hello World</value>
    </property>
  </bean>
</beans>

2 发现了这个常见的异常
E:\test>java -cp . -jar MyProject.jar
Exception in thread "main" java.lang.NoClassDefFoundError: org/springframework/beans/factory/BeanFactory
Caused by: java.lang.ClassNotFoundException: org.springframework.beans.factory.BeanFactory
        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)

3 经查找,发现正确的MANIFEST.MF如下
 
Manifest-Version: 1.0
Main-Class: net.java2000.test.jar.TestJar
Class-Path: spring.jar
 lib/commons-logging-1.1.jar

这里特别说明一下
1)在 Class-Path: 后面有一个空格,切记
2)在 Class-Path: 后面写上你的jar 用空格分开
3)如果需要换行,切记在上一行末尾一定要有一个空格,下一行的开头一定要有一个空格
4)最后一行要是一个空行,否则Eclipse打包时有可能把你的Class-Path 给忽略掉

4 运行效果如下:

5 结论
1)  使用 java -cp 来设置 classpath 对于 jar来说是无效的,因为根据jar的安全规定,其内部的Class-Path 会起作用,外部的会被屏蔽掉(注意是屏蔽掉,不是覆盖掉)
2) Java自身提供了一个设置classpath的方案,那就是使用命令行参数

-Xbootclasspath:      完全取代基本核心的Java class 搜索路径. 
                                    不常用,否则要重新写所有Java 核心class 
-Xbootclasspath/a: 后缀在核心class搜索路径后面.常用!! 
-Xbootclasspath/p: 前缀在核心class搜索路径前面.不常用,避免 
                                    引起不必要的冲突. 

语法如下: 
(分隔符与classpath参数类似,unix使用:号,windows使用;) 
java -Xbootclasspath/a:spring.jar;lib/commons-logging-1.1.jar -jar MyProject.jar 

3)当然,你把jar放到 {Java_home}\jre\lib\ext 这个目录下面也是可以的,应为JVM肯定会搜索这个目录。


↓下一篇:没有了
相 关 文 章   发布商链接
·JAVA最为基础知识精华总结
·用Swing实现数据表格功能
·利用Java实现zip压缩/解压缩
·如何用Java获得IP地址
·什么时候用抽象类,什么时候用接口?
·JAVA通过JNI调用本地C语言方法
·Java开发中的事件驱动模型实例详解...
·如何使用Java操作Windows系统注册表
·为Java程序中添加播放MIDI音乐功能
·了解Java 语言中的IO系统
 §最新评论:(评论内容只代表网友观点,与本站立场无关!)
网名: 验证码:  【所有评论】【↑返回顶部
评 分: 12 345
评论内容:(不能超过500字,请自觉遵守互联网相关政策法规。[按 Ctrl+Enter 可直接提交]
注意:请勿在本站发布政治话题、色情及违反法律的内容。
IT知道网 声明:刊登此文章是为了传递更多信息,文章内容仅供参考,转载请注明出处。
推 荐 文 章
·详例实现java调用ORACLE的存...
·java读取和修改ini配置文件实
·如何用java实现快速排序算法...
·java中的字节流和字符流的存...
·Java调用SQL Server存储过程(
·java垃圾回收机制的意义及其...
·Java网络数据流解析的三种方...
·Java在Linux下处理图形遇到问
·在Linux上远程部署Java应用程
·用JAVA实现文本形式的树状结...
·JAVA冒泡排序法代码小实例
·java实现输出加密码保护的exc...
·Java多种方法实现删除一个集...
·怎么打包成jar文件步骤
·Java实现图像编码输出的示例...
热 门 文 章
·JAVA冒泡排序法代码小实例
·怎么打包成jar文件步骤
·Java操作Word, Excel文档示例
·Java编写的模拟ATM取款机程序...
·什么时候用抽象类,什么时候用...
·用JAVA实现文本形式的树状结...
·java实现输出加密码保护的exc...
·实例解说java 反射机制
·利用Java实现zip压缩/解压缩
·java中(overload)重载与(over...
·JAVA最为基础知识精华总结
·Java调用SQL Server存储过程(...
·利用Java 3D技术播放动画之JM...
·基于java的图片文件格式转换...
·Java实现图像编码输出的示例...
网站首页 - 关于本站 - 加入收藏 - 网站地图 - 友情连接 - 在线留言 - 联系我们 - 返回顶部
Copyright © 2007 IT知道网.[冀ICP备07026896号]. All Rights Reserved .