java"ClassNotFoundException"エラー
-
11-12-2019 - |
質問
私はjavaプログラミングに慣れておらず、非常に悪意のあるエラー「ClassNotFoundException」エラーが発生しています。
奇妙なことは、それがうまくコンパイルされるということです:
java -cp /usr/share/java/scribe-1.3.0.jar FacebookProg
しかし、私はそれを実行しようとすると、私は次のエラーが表示されます:
steve@steve-ThinkPad-T61:~/facebook$ java FacebookProg
Exception in thread "main" java.lang.NoClassDefFoundError:
org/scribe/builder/ServiceBuilder
at FacebookProg.main(FacebookProg.java:8)
Caused by: java.lang.ClassNotFoundException: org.scribe.builder.ServiceBuilder
at java.net.URLClassLoader$1.run(URLClassLoader.java:202)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:190)
at java.lang.ClassLoader.loadClass(ClassLoader.java:306)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:301)
at java.lang.ClassLoader.loadClass(ClassLoader.java:247)
... 1 more
私はオンラインでチェックしましたが、javaはコンパイル時に見つけることができた実行時にライブラリを見つけることができないようです。だから、次のバリエーションを試してみました:
java -cp /usr/share/java/scribe-1.3.0.jar FacebookProg
java -cp /usr/share/java/ FacebookProg
export CLASSPATH="/usr/share/java"; java FacebookProf
export CLASSPATH="/usr/share/java/usr/share/java/scribe-1.3.0.jar"; java FacebookProg
私はStackOverflowとgoogleのいくつかの場所をチェックしましたが、その理由はまだ分かりません。私はjavaが初めてなので、おそらく簡単な解決策がありますが、見つけることができません。Ubuntu11.04でSun Java1.6 64ビットを使用しています。スクライブ-1.3.0。jarファイルは「/usr/share/java」にあり、javaパッケージを配置する標準的な場所だと思います。
ベアボーンのコードはここにあります(重要な場合):
import org.scribe.builder.*;
import org.scribe.builder.api.*;
import org.scribe.oauth.*;
public class FacebookProg {
public static void main (String args[]) {
OAuthService service = new ServiceBuilder()
.provider(FacebookApi.class)
.apiKey("blah_blah")
.apiSecret("blah_blah")
.build();
}
}
解決
クラスパスは、使用している外部ライブラリのディレクトリと自分自身を実行しようとしているクラスを指す必要があります。これを試してください:
windows:
java -cp .;/usr/share/java/scribe-1.3.0.jar FacebookProg
.
Linux:
java -cp .:/usr/share/java/scribe-1.3.0.jar FacebookProg
.
ところで、それをコンパイルするためにこれを実行する必要があります。
javac -cp /usr/share/java/scribe-1.3.0.jar FacebookProg
. 他のヒント
プログラムのディレクトリがになっているとします。
$ home
$ home / lib / *。JAR
:のようなスクリプトを書くことができます
for file in "$HOME/lib/*.jar"
do
if [ -f $file ]
then
CLASSPATH=$CLASSPATH:$file
else
echo ignore $file
fi
done
java -cp $CLASSPATH FacebookProg
. java -cp /usr/share/java/scribe-1.3.0.jar FacebookProg
.
FacebookProg.classを同じディレクトリにコンパイルした場合、これはうまくいくはずです。java -cp /usr/share/java/scribe-1.3.0.jar:/locationOfFacebookProg.class directory/ FacebookProg
を試すことができます
これは...
java -cp /usr/share/java/scribe-1.3.0.jar FacebookProg
あなたが実行していることを意味します FacebookProg
クラス、それをコンパイルしません。
あなたが去るならば -cp ...
アウト、あなたは重要なクラスパスを残しているので、JVMはクラスを見つけることができません FacebookProg
必要です。
コンパイルするには、次のものが必要です
javac -cp /usr/share/java/scribe-1.3.0.jar FacebookProg.java
(注 javac
, の代わりに、 java
コンパイラを起動するには)
実行するには、あなたはすでに方法を知っています。
また、次の行にエラーがあります:
export CLASSPATH="/usr/share/java"; java FacebookProf
export CLASSPATH="/usr/share/java/usr/share/java/scribe-1.3.0.jar"; java FacebookProg
最初のスペルミス FacebookProg
そして、classpathに必要なjarがない場合、2番目のjarへのパスが間違っています。試してみてください
export CLASSPATH="/usr/share/java/scribe-1.3.0.jar"; java FacebookProg
また、瓶が実際に次の場所にあることを確認してください /usr/share/java/scribe-1.3.0.jar