2012-04-30 79 views
11

好的我知道这个问题以前已经被许多次提过很多次了,但是我已经使用了它并查看了一些例子,并在过去一个月里看到了关于SO的问题,无法让这个工作。我认为问题在于我希望能够从Eclipse和命令行运行该程序。我也使用OSX,我认为我正在阅读的很多例子都是针对Windows/Linux的。从命令行运行时将jar添加到类路径

如果我在Eclipse编译一个简单的程序,我想在命令行中运行我这样做:

java -cp bin MyProgram 

我还有一个程序我编译并在Eclipse中运行,this引用的MySQL JDBC连接器(mysql-connector-java-5.1.19-bin.jar),它存储在同一个目录中。这从Eclipse正常工作,但我不能从命令行运行它。

我试过的东西全部组合...

java -classpath "bin;mysql-connector-java-5.1.19-bin.jar" MyProgram 
java -cp bin\;mysql-connector-java-5.1.19-bin.jar MyProgram 

,并得到各种类未找到错误的...

Exception in thread "main" java.lang.NoClassDefFoundError: MyProgram 
Caused by: java.lang.ClassNotFoundException: MyProgram 
    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) 
+0

嗨马特,如果我没有记错的话,我认为在classpath是路径申报要执行的主类。所以在这种情况下,如果你的班级在bin文件夹中,我只会尝试:java MyProgram或java -cp myprogrampath MyProgram –

+1

@FedericoGiust不是特别的; classpath只是定义了一个档案或一组类的路径。类路径可能包含或不包含可运行类(通常会导致异常或java.exe错误)。类路径可以包含没有可运行类的目录和存档。 – Qix

+0

[Java命令行与外部.jar]的可能重复(http://stackoverflow.com/questions/6069702/java-command-line-with-external-jar) –

回答

13

您的问题是您正在使用的最小分隔符。分隔符;用于窗口。在Unix系统上,你应该使用:代替:

的java -classpath “斌:使用mysql-connector-java的5.1.19-bin.jar” MyProgram

0

您没有设置主类中classpaht ,尝试在-cp

+0

我怀疑当前目录包含它的主类,我会相信'bin'包含这些。 –

+0

'MyProgram'必须被设置到classpath中,如果你把'MyProgram'放入包中,你还需要添加pachage的名字。 – user1335794

+0

别担心,我完全了解classpath和完全限定名。我只是说如果他的类位于bin目录中,那么将当前目录添加到类路径中是没有用的。 –

5

使用添加./ ':' 在Unix系统中分离出来的条目:

java -classpath "bin:mysql-connector-java-5.1.19-bin.jar" MyProgram 
java -cp bin:mysql-connector-java-5.1.19-bin.jar MyProgram 

Eclipse会自动转换它。

+0

任何原因逃脱结肠? –

+0

nope,只是不好的剪切/粘贴...我已经修复了它 – mprivat

-2

我会强烈建议你尝试--jar或罐子。我不记得它是什么,但那些应该解决你。另外,如果你有苹果的开发工具,他们有一个jar包装器。

+1

这是-jar,但显然他的课程并没有被注意到。忘记他们来自上个世纪的Apple开发工具。 Eclipse,NetBEans和IntelliJ比那些早几年。 –

+0

@GuillamePolet Agrred,但我只提到他们对他们做了一个实用工具,用于从罐子生产应用程序 –

1

请参见:

String pathSeparator = System.getProperty("path.separator"); 
相关问题