我已经为我的项目创建了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 arguments...

然后它正常工作……
但我不想要完整的类路径名。
所以当我的manifest.mf的结构如下所示时:
我希望它使用以下类路径运行:
---------------------
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 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

请告诉我解决方法…

最佳答案

显然,所需的库不在实际的类路径上。Here it says:
类路径头中的url相对于applet或应用程序的jar文件的url给出。
所以在我的理解中,Java现在在这个位置查找Hector库(仅限):

/usr/local/bin/lib/hector-0.6.0-17.jar

注意,如果使用-jar选项执行java,则类路径条目仅从manefest中获取,而忽略-cp$CLASSPATH中的其他条目。

关于java - jar中的MANIFEST.MF有问题,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/4669863/

10-10 14:30