3

グアバでプログラムを実行したい。プログラムをコンパイルすると

編集: java -> コンパイル呼び出しの javac

javac -cp myPackages/guava-13.0.jar MyScanner.java    

問題はない。

走ろうとしたら

java MyScanner -cp myPackages/guava-13.0.jar 

コンソールに次の出力が表示されます。

Exception in thread "main" java.lang.NoClassDefFoundError: com/google/common/base/Optional
at MyScanner.main(MyScanner.java:37)
Caused by: java.lang.ClassNotFoundException: com.google.common.base.Optional
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)
... 1 more

外部jarを使用してプログラムを実行する方法を教えてください。

4

3 に答える 3

5

あなたが望むのは次のとおりだと思います:

java -cp myPackages/guava-13.0.jar:. MyScanner

クラスパスに 2 つの値「.」を設定していることに注意してください。(現在のディレクトリ)とグアバへのパス。問題は、メイン クラスを指定した後に classpath オプションを指定したことですMyScanner。メイン クラスの後に指定されたオプションは、プログラムに対する引数であり、Java 自体に対する引数ではありません。

于 2012-08-08T17:05:31.750 に答える
1

以下のことを試してみてください

java -classpath myJar.jar my.package.Program
于 2012-08-08T16:59:22.970 に答える
1

クラス名の後にあるもの

java MyScanner -whatever is --after
               ^         ^  ^ 

クラスのメインメソッドとクラス名の前のすべての引数になります

java --what -is -before MyScanner
     ^      ^   ^

jvm の引数になります。-cp または -classpath は、プログラムの引数ではなく、jvm 引数でなければなりません。

読まなければならない

java -cp myPackages/guava-13.0.jar MyScanner 
于 2012-08-08T17:05:33.547 に答える