2012-08-08 34 views
3

我想用番石榴运行我的程序。如果我编译我的程序与如何用外部jar执行java程序

编辑: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 

你能告诉我怎样才能与外部罐子执行程序?

+0

你能告诉你的JAR文件的清单文件?它是否包含一个针对guava jar文件的类路径声明? – 2012-08-08 16:58:05

+0

你用“java MyScanner -cp guava-13.0.jar”试过了吗? – JuanZe 2012-08-08 16:58:42

回答

5

我想你想要的是:

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

注意我在classpath中设置两个值, '' (当前目录)和番石榴的路径。你的问题是你指定了类路径选项之后你指定了你的主类MyScanner。在主类之后指定的选项是程序的参数,而不是java本身。

+0

非常感谢:-)这正是我需要运行我的程序。现在我没有得到更多的ClassNotFound问题 – lennykey 2012-08-08 18:41:40

+0

没问题。通常在SO--我们接受帮助我们解决问题的答案。您可以通过点击您认为解决问题的答案旁边的复选框来实现。 – 2012-08-08 18:44:50

1

你应该试试下面的事情

java -classpath myJar.jar my.package.Program 
1

因为你的课后什么名字

java MyScanner -whatever is --after 
      ^  ^^ 

将参数在你的班上,一切的主要方法,你的类名

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

之前将是JVM参数。 -cp或-classpath必须是jvm参数,而不是程序的参数。

它必须阅读

java -cp myPackages/guava-13.0.jar MyScanner 
+0

如果我尝试这个,我会得到:线程“main”中的异常java.lang.NoClassDefFoundError:MyScanner – lennykey 2012-08-08 18:42:28