执行jar包出错:Exception in thread "main" java.lang.NoClassDefFoundError

1. 错误

Exception in thread main java.lang.NoClassDefFoundError:org/apache/axis2/client/Stub

Exception in thread main java.lang.NoClassDefFoundError:javax/mail/internet/ParseException

......

由于项目需求,我要在Linux中调用执行jar包,jar包是一个Web Service客户端程序,在Windows环境Java IDE工具Eclipse中编写,程序在Eclipse中执行正常,然而,在打包为jar文件之后执行,却出现了以上错误。

这主要是因为jar包在执行时需要用到以上类文件,但是却没有找到这些文件。

之所以在Eclipse中执行正确,是因为我们配置了工程的环境,通过build path已经将所需的类文件以jar包的形式添加到工程中。而打包为jar包之后,由于没有配置环境变量,程序不知道去哪里寻找这些类文件,所以出错。

2. 解决

解决方法有二:

a) 将以上这些类文件所在的jar包路径加入环境变量classpath中,这样在执行jar包时系统会根据classpath的值找到jar包;

b) 在打包时,将这些jar包写入MANIFEST.MF中,例如:

Manifest-Version: 1.0

Created-By: 1.6.0_45 (Sun Microsystems Inc.)

Class-Path: lib/axiom-api-1.2.13.jar lib/axiom-impl-1.2.13.jar lib/axis2-adb-1.6.2.jar lib/axis2-kernel-1.6.2.jar lib/axis2-transport-http-1.6.2.jar lib/axis2-transport-local-1.6.2.jar lib/commons-codec-1.3.jar lib/commons-httpclient-3.1.jar lib/commons-logging-1.1.1.jar lib/gson-2.1.jar lib/httpcore-4.0.jar lib/mail-1.4.jar lib/neethi-3.0.2.jar lib/wsdl4j-1.6.2.jar lib/XmlSchema-1.4.7.jar

Main-Class: iUserMgr.UserMgrMain

【注】:

  • Class-Path后面的冒号之后有一个空格,并且两个jar文件之间有一个空格。
  • 因为我的程序中用到的jar包太多,所以我把它们存放在文件夹lib下面。

将用到的这些jar文件放入lib文件夹,并且将lib文件夹和打包后的jar文件放在同一个目录下,然后执行jar包就不会出现这些问题了。

此处我用的方法二,因为要在Linux中执行jar包,第二种方法会比较方便一些。但是这种方法需要保证lib文件夹始终跟你的jar包在同一个目录下。

3. 附

Exception in thread main java.lang.NoClassDefFoundError:org/apache/axis2/client/Stub

这个类文件在axis2-kernel-1.6.2.jar中

Exception in thread main java.lang.NoClassDefFoundError:javax/mail/internet/ParseException

这个类文件在mail-1.4.jar中

一般情况下,在使用axis2生成Web Servie客户端时,需要的jar包为以下:

axiom-api-1.2.13.jar
axiom-impl-1.2.13.jar
axis2-adb-1.6.2.jar
axis2-kernel-1.6.2.jar
axis2-transport-http-1.6.2.jar
axis2-transport-local-1.6.2.jar
commons-codec-1.3.jar
commons-httpclient-3.1.jar
commons-logging-1.1.1.jar
httpcore-4.0.jar
mail-1.4.jar
neethi-3.0.2.jar
wsdl4j-1.6.2.jar
XmlSchema-1.4.7.jar

参考资料:

1. https://blog.csdn.net/MaoTongBin/article/details/10110711

2. https://bbs.csdn.net/topics/230052372

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值