执行jar包出错:Exception in thread "main"

时间:2025-03-02 09:17:06

1. 错误

Exception in thread main :org/apache/axis2/client/Stub

Exception in thread main :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-Version: 1.0

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

Class-Path: lib/axiom-api-1.2. lib/axiom-impl-1.2. lib/axis2-adb-1.6. lib/axis2-kernel-1.6. lib/axis2-transport-http-1.6. lib/axis2-transport-local-1.6. lib/commons-codec-1. lib/commons-httpclient-3. lib/commons-logging-1.1. lib/gson-2. lib/httpcore-4. lib/mail-1. lib/neethi-3.0. lib/wsdl4j-1.6. lib/XmlSchema-1.4.

Main-Class:

【注】:

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

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

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

3. 附

Exception in thread main :org/apache/axis2/client/Stub

这个类文件在axis2-kernel-1.6.中

Exception in thread main :javax/mail/internet/ParseException

这个类文件在mail-1.中

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

axiom-api-1.2.
axiom-impl-1.2.
axis2-adb-1.6.
axis2-kernel-1.6.
axis2-transport-http-1.6.
axis2-transport-local-1.6.
commons-codec-1.
commons-httpclient-3.
commons-logging-1.1.
httpcore-4.
mail-1.
neethi-3.0.
wsdl4j-1.6.
XmlSchema-1.4.

参考资料:

1. /MaoTongBin/article/details/10110711

2. /topics/230052372