与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.jar
和hector-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的类路径