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

我在文件夹/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中的任何修改

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将忽略类路径 。 它只会看那个jar子!! 尝试使用清单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开关,如果你喜欢)。

线路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 …

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

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

包含JAR内的JAR的类路径