質問

私は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

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top