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

请注意,我在类路径中设置了两个值“。” (当前目录)和番石榴的路径。您的问题是您在指定 main class之后MyScanner指定了 classpath 选项。在主类之后指定的选项是程序的参数,而不是 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 回答