我正在尝试在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文件中。
答案 0 :(得分:3)
NoClassDefFoundError
表示(quoting the relevant JavaDoc):
如果Java虚拟机或ClassLoader实例尝试,则抛出该异常 加载类的定义(作为普通方法调用的一部分或 作为使用新表达式创建新实例的一部分)和否 可以找到班级的定义。
当前正在执行的搜索类定义存在 编译了类,但无法再找到定义。
要检查两件事:
首先,您的类路径中似乎有一个拼写错误(虽然在编译代码时它不可能存在,或者它不能成功编译,所以这显然不是你看到的例外情况。):
/urs/jdk/mail.jar
应该是
/usr/jdk/mail.jar
确保您还使用-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能够找到该类,但无法加载它。当无法初始化违规类中的某些静态字段时,通常会发生这种情况。所以我确信你的类路径可能是正确的;但是该类中的某些静态字段无法正确设置。