【问题标题】:java.lang.NoClassDefFoundError: javax.mail.Address error when running from AIXjava.lang.NoClassDefFoundError:从 AIX 运行时出现 javax.mail.Address 错误
【发布时间】:2011-10-23 10:15:03
【问题描述】:

我试图在我的 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 文件中。

【问题讨论】:

    标签: java jar classpath aix


    【解决方案1】:

    NoClassDefFoundError 表示 (quoting the relevant JavaDoc):

    如果 Java 虚拟机或 ClassLoader 实例尝试 加载类的定义(作为正常方法调用的一部分或 作为使用 new 表达式创建新实例的一部分)并且没有 可以找到类的定义。

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

    要检查两件事:

    1. 首先,您的类路径中似乎有错字(尽管在您编译代码时它不存在,或者它不会成功编译,所以这显然不是您出现异常的根本原因'正在看。):

      /urs/jdk/mail.jar
      

      应该是

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

      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
      

    【讨论】:

    • 啊,谢谢,纠正了错字,但我仍然遇到同样的错误。
    • 您是否将类路径传递给 java 以及 javac?更新了答案。
    【解决方案2】:

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

    【讨论】:

    • NoClassDefFound 表示类定义couldn't be found
    • 我什么时候说可以找到类定义了?我刚才说.class文件在类路径中是可用的。
    • 当你说 NoClassDefFoundError 意味着 ClassLoader 能够找到类。 JavaDoc 与此相矛盾。
    • 是的,类加载器确实能够在类路径中找到该类。否则会抛出 ClassNotFound 异常。查找类和查找类定义是两件不同的事情。
    • 很公平 - 然后我误解了你的答案。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-09-15
    • 1970-01-01
    • 1970-01-01
    • 2019-02-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多