与jar中的MANIFEST.MF相关的问题

时间:2011-01-13 09:34:44

标签: java

我在文件夹/usr/local/bin/niidle.jar中创建了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

我在niidle.jar文件夹中添加了'hector-0.6.0-17.jar',如下所示:

niidle.jar/lib/hector-0.6.0-17.jar

当我使用命令运行时:

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

当我使用不同的命令再次运行时如下:

java -cp /Projects/EnwelibDatedOct13/Niidle/lib/hector-0.6.0-17.jar -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-------------

请告诉我这是什么解决方案。或者jar中的MANIFEST.MF中的任何修改

3 个答案:

答案 0 :(得分:2)

  

java -cp /Projects/EnwelibDatedOct13/Niidle/lib/hector-0.6.0-17.jar -jar /usr/local/bin/niidle.jar arguments .....

您无法将-cp开关与-jar开关一起使用。

来自http://mindprod.com/jgloss/classpath.html

  

如果使用-jar选项,则java.exe 将忽略类路径。它只会看那个罐子!!尝试使用清单Class-Path来让Java查看辅助jar


  

我在niidle.jar文件夹中添加了'hector-0.6.0-17.jar',如下所示:

据我所知,你不能以这种方式嵌套.jar文件。

由于您Class-Path: hector-0.6.0-17.jar,您需要needle.jarhector-0.6.0-17.jar 并排并从其公共目录运行niidle.jar(如果您愿意,可以使用-jar开关。

答案 1 :(得分:0)

线路niidle.jar / lib / hector-0.6.0-17.jar令人困惑。是niidle.jar目录还是文件? 我建议你发布你正在使用的完整清单,目录结构,命令行和当前工作目录。

但通常你应该在你的清单上写下: Class-Path:hector-0.6.0-17.jar

然后将所有jar放在一个目录中。我们称之为foo。 现在打开命令提示符,转到foo并运行

java -jar niidle.jar args ...

我相信一切都会奏效。然后,如果你想玩你的罐子的位置。

答案 2 :(得分:0)

要设置“罐子里的罐子”,请看一下这个问题:

Classpath including JAR within a JAR