当MANIFEST.MF中列出类时,为什么我的jar会产生NoClassDefFoundError?

时间:2011-01-13 10:42:49

标签: java manifest.mf

我在以下文件夹usr/local/bin/niidle.jar中创建了jar,我的MANIFEST.MF文件如下:

  Manifest-Version: 1.0
  Main-Class: com.ensarm.niidle.web.scraper.NiidleScrapeManager
  Class-Path: hector-0.6.0-17.jar

我确认文件hector-0.6.0-17.jar也存在于文件夹中:

  
    

/Projects/EnwelibDatedOct13/Niidle/lib/hector-0.6.0-17.jar

  

我不想在MANIFEST.MF文件中提供完整的类路径名,因为我必须在另一台机器上运行这个jar。所以我在MANIFEST.MF文件中只提供了jar文件名Class-Path=hector-0.6.0-17.jar

尽管在MANIFEST.MF文件中提到了Class-Path,但当我使用命令运行它时:

  
    

java -jar /usr/local/bin/niidle.jar arguments ...

  

显示错误消息:

--Exception in thread "main" java.lang.NoClassDefFoundError:
me/prettyprint/hector/api/Serializer
     at
 com.ensarm.niidle.web.scraper.NiidleScrapeManager.main(NiidleScrapeManager.java:21)
 Caused by: java.lang.ClassNotFoundException:
 me.prettyprint.hector.api.Serializer
     at java.net.URLClassLoader$1.run(URLClassLoader.java:200)
     at java.security.AccessController.doPrivileged(Native Method)
     at java.net.URLClassLoader.findClass(URLClassLoader.java:188)
     at java.lang.ClassLoader.loadClass(ClassLoader.java:307)
     at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:301)
     at java.lang.ClassLoader.loadClass(ClassLoader.java:252)
     at java.lang.ClassLoader.loadClassInternal(ClassLoader.java:320)
     ... 1 more

请为此错误消息提供解决方案。

1 个答案:

答案 0 :(得分:2)

Class-Path对于jar文件所在的目录是相对的或绝对的。 所以对于你的情况你需要hector-0.6.0-17.jar到/ usr / local / bin