在jar文件中的manifest.mf中设置类路径的问题

时间:2011-01-12 09:47:05

标签: java

我创建了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)

......还有1个

我通过提及完整的类路径名来删除此错误, 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)

......还有1个

我不想在MANIFEST.MF中提及完整的类路径名,所以请告诉我这个解决方案,或者如何设置jar文件名“hector-0.6.0-17.jar”到 jar中MANIFEST.MF中的Class-Path。

1 个答案:

答案 0 :(得分:2)

您必须在清单文件中编写相对类路径。例如,如果您的应用程序具有包含所有第三方jar的lib目录,则只需将以下行添加到清单文件中:

Class-Path: lib/hector-0.6.0-17.jar

现在,如果您从java -jar bin/niidle.jar arguments...

运行它,/usr/local/应该有效

我建议您将所有jar文件放在一个目录中,例如库。它更容易维护。 Bin目录应包含脚本。