我目前正在使用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.
答案 0 :(得分:1)
我建议您查看清单文件文档,特别是classpath部分。
在清单文件中指定依赖项,除了在从命令行启动时允许更紧凑的语法时,可以在目录中指定相对于主jar而不是当前目录的条目。
请记住,在这种情况下,您必须使用以下命令启动您的应用程序:
java -jar <<yourjar.jar>> <<options>>
答案 1 :(得分:0)
Linux在路径上区分大小写。您的路径包含“downloads”目录,而在java命令中您使用的是“Downloads”目录。
此外,要运行的类将是相同的:doc.DOCDump
无处不在。您可以使用package.className
指定类,而不是类文件的某个路径。
答案 2 :(得分:0)
您作为main提供的类文件不需要任何文件路径前缀。只需输入:
java -cp .:/home/noor/Downloads/commands/jarfile.jar doc.DocDump <file>
虚拟机将在类路径(您已指定)中查找该doc.DocDump
类。