java.lang.NoClassDefFoundError:从AIX运行时出现javax.mail.Address错误

时间:2011-08-09 17:13:28

标签: java jar classpath aix

我正在尝试在AIX服务器上运行java程序。我写了类路径

/usr/java6/bin/javac  -classpath :.:/usr/jdk/commons-net-3.0.1.jar:/usr/jdk/classes12.jar:/usr/jdk/mysql-connector-java-5.1.17-bin.jar:/usr/jdk/jtds-1.2.5.jar:/urs/jdk/mail.jar:/usr/jdk/joda-time-1.6.2.jar:/usr/jdk/commons-codec-1.4.jar:/usr/jdk/commons-logging-1.1.1.jar:/usr/jdk/httpclient-4.1.1.jar:/usr/jdk/httpclient-cache-4.1.1.jar:/usr/jdk/httpcore-4.1.jar:/usr/jdk/httpmime-4.1.1.jar:/usr/jdk/mailapi.jar:/usr/jdk/pop3.jar:/usr/jdk/smtp.jar:/usr/jdk/dsn.jar:/usr/jdk/imap.jar -d . *.java

似乎正确编译。然后当我运行程序时

java daily_transmission

我收到错误java.lang.NoClassDefFoundError:javax.mail.Address。 Eclipse之前的所有.jar文件都在/ usr / jdk文件中。

2 个答案:

答案 0 :(得分:3)

NoClassDefFoundError表示(quoting the relevant JavaDoc)

  

如果Java虚拟机或ClassLoader实例尝试,则抛出该异常   加载类的定义(作为普通方法调用的一部分或   作为使用新表达式创建新实例的一部分)和否   可以找到班级的定义。

     

当前正在执行的搜索类定义存在   编译了类,但无法再找到定义。

要检查两件事:

  1. 首先,您的类路径中似乎有一个拼写错误(虽然在编译代码时它不可能存在,或者它不能成功编译,所以这显然不是你看到的例外情况。):

    /urs/jdk/mail.jar
    

    应该是

    /usr/jdk/mail.jar
    
  2. 确保您还使用-classpath选项将类路径传递给java以及javac以在运行时传递这些.jar文件:< / p>

    java -classpath :.:/usr/jdk/commons-net-3.0.1.jar:/usr/jdk/classes12.jar:/usr/jdk/mysql-connector-java-5.1.17-bin.jar:/usr/jdk/jtds-1.2.5.jar:/urs/jdk/mail.jar:/usr/jdk/joda-time-1.6.2.jar:/usr/jdk/commons-codec-1.4.jar:/usr/jdk/commons-logging-1.1.1.jar:/usr/jdk/httpclient-4.1.1.jar:/usr/jdk/httpclient-cache-4.1.1.jar:/usr/jdk/httpcore-4.1.jar:/usr/jdk/httpmime-4.1.1.jar:/usr/jdk/mailapi.jar:/usr/jdk/pop3.jar:/usr/jdk/smtp.jar:/usr/jdk/dsn.jar:/usr/jdk/imap.jar daily_transmission
    

答案 1 :(得分:0)

NoClassDefFoundError意味着ClassLoader能够找到该类,但无法加载它。当无法初始化违规类中的某些静态字段时,通常会发生这种情况。所以我确信你的类路径可能是正确的;但是该类中的某些静态字段无法正确设置。

相关问题