2012-04-30 161 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"); 
相關問題