2012-10-24 80 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