0

メールを送信するための単純なJavaであるTomcatを使用してLinuxサーバーで実行しようとしています。

ディレクトリに myClass.java と mail.jar があります

私はすでにやった:

# javac -cp mail.jar myClass.java

エラーは返されませんが...

次のように実行しようとすると:

# java myClass

次のエラーが表示されます。

Exception in thread "main" java.lang.NoClassDefFoundError: javax/mail/Authenticator
Caused by: java.lang.ClassNotFoundException: javax.mail.Authenticator
        at java.net.URLClassLoader$1.run(URLClassLoader.java:217)
        at java.security.AccessController.doPrivileged(Native Method)
        at java.net.URLClassLoader.findClass(URLClassLoader.java:205)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:321)
        at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:294)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:266)
Could not find the main class: myClass. Program will exit.

奇妙なことに、私はそれを Windows でまったく同じように実行し、動作します。また、内部に System.out だけを使用して単純なクラスを実行しようとすると、実行されます。

しかし、mail.jarに含まれていることをすでに確認している場合、Authenticatorクラスを取得できない理由がわかりません

私はJava 1.6.0_22を使用しています

ありがとう!^^

4

2 に答える 2

0

コンパイルするためにクラスパスに含めmail.jarました。クラスを実行するときにも含める必要があります。

于 2013-01-29T21:40:48.407 に答える
0

デフォルトでは、java MyClassなどのコマンドを使用してコマンド ラインで Java プログラムを実行すると、Java SE (Standard Edition) 環境が実行されます。もう 1 つの一般的な環境は、Java EE (Enterprise Edition) です。

あなたのプログラムが不平を言っているクラス (javax.mail.authentication) は Java EE パッケージからのものであり、ランタイムには絶対に存在しません

コードをコンパイルできるということは、Eclipse ビルド パス (Eclipse を使用している場合) のどこかに、ランタイムに含めていない依存関係の jar があることを意味する必要があります (例: mail.jar)。

実行時に依存関係が利用できるようにプログラムを実行する必要があります。

java -jar /path/to/mail.jar MyClass

または、Java EE 環境でプログラムを実行します

于 2013-01-29T21:45:21.180 に答える