jar中的MANIFEST.MF问题

时间:2011-01-13 06:14:54

标签: java

我在以下文件夹中创建了我的jar文件:

/usr/local/bin/niidle.jar

我有一个jar文件位于以下文件夹中

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

这个文件'hector-0.6.0-17.jar'我必须在jar中包含在MANIFEST.MF中。

当我在MANIFEST.MF中提到类路径时如下:

Manifest-Version: 1.0
Main-Class: com.ensarm.niidle.web.scraper.NiidleScrapeManager
Class-Path: /Projects/EnwelibDatedOct13/Niidle/lib/hector-0.6.0-17.jar 

当我使用命令运行时:

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

它运作正常..

但是我不想给出完整的Class-Path名称,我必须按如下方式给出Class-Path:

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

当我使用命令运行时:

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

显示错误消息:

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

请告诉我解决方案...

2 个答案:

答案 0 :(得分:1)

我至少看到两种解决方案:

  1. 在niidle.jar中存储hector-0.6.0-17.jar并在Class-Path中使用相对路径。例如。 Class-Path: lib/hector-0.6.0-17.jar(适用于niidle.jar / lib / hector-0.6.0-17.jar)
  2. java -cp /Projects/EnwelibDatedOct13/Niidle/lib/hector-0.6.0-17.jar -jar /usr/local/bin/niidle.jar

答案 1 :(得分:0)

在运行命令的文件夹中创建一个lib文件夹,将hector-0.6.0-17.jar放入其中,然后再次尝试运行该命令。