2012-10-24 142 views
0

我目前使用Linux和我要的形式運行命令java命令行

java -cp .:../jarfile.jar doc.DocDump <file> 

假設目前,我在文件夾中的/ home /諾爾/下載/命令/ commandDump。假設,我需要從任何地方運行命令,我正在嘗試下面的命令,但它沒有運行。

假設我目前在國內

java -cp .:/home/noor/downloads/commands/commandDump/../jarfile.jar doc.DocDump 

「命令」文件夾中包含jarfile.jar還包含一個文件夾「命令」,然後包含文件夾「文檔」,然後包含類 「DocDump」

我得到這個錯誤:

Exception in thread "main" java.lang.NoClassDefFoundError: Doc/DocDump 
Caused by: java.lang.ClassNotFoundException: Doc.DocDump 
    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) 
Could not find the main class: doc.DocDump. Program will exit. 

回答

0

Linux是對的情況下的路徑很敏感的。您的路徑包含「downloads」目錄,而在您使用「Downloads」目錄的java命令中包含「downloads」目錄。

此外,要運行的類將是相同的:doc.DOCDump無處不在。您可以使用package.className指定類,而不是指向類文件的某個路徑。

+0

其實這是一個錯字,我現在糾正它,謝謝 – Noor

+0

見我更新的答案。 –

+0

我使用這個命令,但仍然出現一些錯誤,java -cp。:/ home/noor/downloads/commands/commandDump /../ jarfile.jar doc.DocDump – Noor

0

您作爲main提供的類文件不需要任何文件路徑前綴。只需鍵入:

java -cp .:/home/noor/Downloads/commands/jarfile.jar doc.DocDump <file> 

虛擬機將尋找在classpath中是doc.DocDump類(您已經指定)。

+0

「commands」文件夾包含jarfile.jar並且還包含一個文件夾「command」一個文件夾「doc」然後包含類「DocDump」 – Noor

+0

你試過這個命令嗎? –

1

我建議您查看清單文件文檔,特別是classpath部分。

指定清單文件中的依賴項,除了從命令行啓動時允許更緊湊的語法外,還可以指定相對於主jar而不是當前目錄的目錄中的條目。

請記住,在這種情況下,你將不得不使用啓動應用程序:

java -jar <<yourjar.jar>> <<options>> 
+0

使用'java -jar',你無法在類路徑中指定其他東西(如果我知道,提供'-jar','-cp'選項將被忽略)。 –

+0

True - 使用-jar,只能在清單文件中指定類路徑。除了一些角落案例外,這不是一個限制。此外,還有一些應用程序(包括eclipse)可以讓您將jar包裝在jar文件中,以便將應用程序作爲單個文件分發。 – thedayofcondor