0

我目前正在使用 linux,我必须以形式运行命令

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

假设目前我在文件夹 /home/noor/downloads/commands/commandDump 中。假设,我需要从任何地方运行命令,我正在尝试下面的命令,但它没有运行。

假设我现在在家

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

“commands”文件夹包含 jarfile.jar,还包含一个文件夹“command”,然后包含一个文件夹“doc”,然后包含类“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.
4

3 回答 3

1

我建议您查看清单文件文档,特别是类路径部分。

在清单文件中指定依赖项,除了在从命令行启动时允许更紧凑的语法外,还可以指定相对于主 jar 而不是当前目录的目录中的条目。

请记住,在这种情况下,您必须使用以下命令启动您的应用程序:

java -jar <<yourjar.jar>> <<options>>
于 2012-10-24T09:57:38.727 回答
0

Linux 在路径上区分大小写。您的路径包含“下载”目录,而在 java 命令中您正在使用“下载”目录。

此外,要运行的类将是相同的:doc.DOCDump无处不在。您使用package.className而不是类文件的某个路径来指定类。

于 2012-10-24T09:51:57.380 回答
0

您作为 main 提供的类文件不需要任何文件路径前缀。只需输入:

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

虚拟机将doc.DocDump在类路径(您已经指定)中查找该类。

于 2012-10-24T09:53:40.710 回答