我创建了jar文件,然后使用命令运行它: -
java -jar /usr/local/bin/niidle.jar arguments ...
然后我收到了这个错误---- 线程“main”中的异常java.lang.NoClassDefFoundError:me / prettyprint / hector / api / Serializer 在com.ensarm.niidle.web.scraper.NiidleScrapeManager.main(NiidleScrapeManager.java:21) 引起:java.lang.ClassNotFoundException:me.prettyprint.hector.api.Serializer 在java.net.URLClassLoader $ 1.run(URLClassLoader.java:200) at java.security.AccessController.doPrivileged(Native Method) 在java.net.URLClassLoader.findClass(URLClassLoader.java:188) at java.lang.ClassLoader.loadClass(ClassLoader.java:307) 在sun.misc.Launcher $ AppClassLoader.loadClass(Launcher.java:301) at java.lang.ClassLoader.loadClass(ClassLoader.java:252) 在java.lang.ClassLoader.loadClassInternal(ClassLoader.java:320)
我通过提及完整的类路径名来删除此错误, MANIFEST.MF中的Class-Path = / Projects / EnwelibDatedOct13 / Niidle / lib / hector-0.6.0-17.jar。 现在当我使用命令运行它时: -
java -cp /Projects/EnwelibDatedOct13/Niidle/lib/hector-0.6.0-17.jar -jar /usr/local/bin/niidle.jar arguments ...
它正常工作。
但是我想在MANIFEST.MF中的Class-Path中仅提及jar文件名“hector-0.6.0-17.jar”。如果我给出完整的类路径,那么它将无法在其他机器上工作。并且 我必须在其他机器上运行这个jar。 当我只提到jar文件名“hector-0.6.0-17.jar”时,我用命令运行它: -
java -cp /Projects/EnwelibDatedOct13/Niidle/lib/hector-0.6.0-17.jar -jar /usr/local/bin/niidle.jar参数... 它向我显示相同的错误消息: -
- 线程“main”中的异常java.lang.NoClassDefFoundError:me / prettyprint / hector / api / Serializer 在com.ensarm.niidle.web.scraper.NiidleScrapeManager.main(NiidleScrapeManager.java:21) 引起:java.lang.ClassNotFoundException:me.prettyprint.hector.api.Serializer 在java.net.URLClassLoader $ 1.run(URLClassLoader.java:200) at java.security.AccessController.doPrivileged(Native Method) 在java.net.URLClassLoader.findClass(URLClassLoader.java:188) at java.lang.ClassLoader.loadClass(ClassLoader.java:307) 在sun.misc.Launcher $ AppClassLoader.loadClass(Launcher.java:301) at java.lang.ClassLoader.loadClass(ClassLoader.java:252) 在java.lang.ClassLoader.loadClassInternal(ClassLoader.java:320)
我不想在MANIFEST.MF中提及完整的类路径名,所以请告诉我这个解决方案,或者如何设置jar文件名“hector-0.6.0-17.jar”到 jar中MANIFEST.MF中的Class-Path。
答案 0 :(得分:2)
您必须在清单文件中编写相对类路径。例如,如果您的应用程序具有包含所有第三方jar的lib目录,则只需将以下行添加到清单文件中:
Class-Path: lib/hector-0.6.0-17.jar
现在,如果您从java -jar bin/niidle.jar arguments...
/usr/local/
应该有效
我建议您将所有jar文件放在一个目录中,例如库。它更容易维护。 Bin目录应包含脚本。