简体   繁体   English

在jar文件中的manifest.mf中设置类路径的问题

[英]problem with setting the class path in manifest.mf within jar file

I have created the jar file,and I run it using command:- 我已经创建了jar文件,并使用以下命令运行它:

java -jar /usr/local/bin/niidle.jar arguments... java -jar /usr/local/bin/niidle.jar参数...

then I got this error---- 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) 然后我得到了这个错误----线程“ main”中的异常java.lang.NoClassDefFoundError:com.ensarm.niidle.web.scraper.NiidleScrapeManager.main(NiidleScrapeManager.java:21:me / prettyprint / hector / api / Serializer )原因:java.lang.ClassNotFoundException:java.net.URLClassLoader $ 1.run(URLClassLoader.java:200)处的me.prettyprint.hector.api.Serializer(java.java.security.AccessController.doPrivileged(Native Method)处)。 net.URLClassLoader.findClass(URLClassLoader.java:188)在java.lang.ClassLoader.loadClass(ClassLoader.java:307)在sun.misc.Launcher $ AppClassLoader.loadClass(Launcher.java:301)在java.lang.ClassLoader .loadClass(ClassLoader.java:252)at java.lang.ClassLoader.loadClassInternal(ClassLoader.java:320)

... 1 more ...还有1个

I removed this error by mentioning the full class path name, Class-Path=/Projects/EnwelibDatedOct13/Niidle/lib/hector-0.6.0-17.jar in MANIFEST.MF. 我通过在MANIFEST.MF中提到完整的类路径名Class-Path = / Projects / EnwelibDatedOct13 / Niidle / lib / hector-0.6.0-17.jar来消除此错误。 And now when I run it by using command:- 现在,当我使用命令运行它时:-

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

its working properly. 它的工作正常。

But I want to mention only jar file name "hector-0.6.0-17.jar" in Class-Path in MANIFEST.MF.If I give full class path,then it will not work on others machine.And I have to run this jar on others machine. 但是我只想在MANIFEST.MF的Class-Path中提到jar文件名“ hector-0.6.0-17.jar”。如果我给出完整的类路径,那么它将在其他机器上不起作用。我必须运行这个罐子放在其他机器上。 And when I mention only jar file name "hector-0.6.0-17.jar",and I run it using command:- 当我只提到jar文件名“ hector-0.6.0-17.jar”时,我使用命令运行它:-

java -cp /Projects/EnwelibDatedOct13/Niidle/lib/hector-0.6.0-17.jar -jar /usr/local/bin/niidle.jar arguments... it is showing me same error message:- java -cp /Projects/EnwelibDatedOct13/Niidle/lib/hector-0.6.0-17.jar -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) -线程“主”中的异常java.lang.NoClassDefFoundError:com.ensarm.niidle.web.scraper.NiidleScrapeManager.main(NiidleScrapeManager.java:21)的me / prettyprint / hector / api / Serializer导致原因:java.lang .ClassNotFoundException:java.net.URLClassLoader $ 1.run(URLClassLoader.java:200)处的me.prettyprint.hector.api.Serializer java.net.URLClassLoader.findClass(URLClassLoader)处java.security.AccessController.doPrivileged(本机方法) .java:188),位于java.lang.ClassLoader.loadClass(ClassLoader.java:307),位于sun.misc.Launcher $ AppClassLoader.loadClass(Launcher.java:301),位于java.lang.ClassLoader.loadClass(ClassLoader.java: 252)at java.lang.ClassLoader.loadClassInternal(ClassLoader.java:320)

... 1 more ...还有1个

I dont want to mention full class path name in MANIFEST.MF,so please tell me solution for this, or how to set only jar file name "hector-0.6.0-17.jar" to Class-Path in MANIFEST.MF in the jar. 我不想在MANIFEST.MF中提及完整的类路径名,所以请告诉我解决方案,或者如何在MANIFEST.MF中仅将jar文件名“ hector-0.6.0-17.jar”设置为Class-Path。罐子里

You have to write the relative class path in your manifest file. 您必须在清单文件中编写相对的类路径。 For example if your application has lib directory where all third party jars are held just add the following line to your manifest file: 例如,如果您的应用程序具有保存所有第三方jar的lib目录,只需将以下行添加到清单文件中:

Class-Path: lib/hector-0.6.0-17.jar

now this java -jar bin/niidle.jar arguments... should work if your are running it from /usr/local/ 现在,如果从/usr/local/运行它,此java -jar bin/niidle.jar arguments...应该可以工作

I'd recommend you to put all your jar files in one directory, eg lib. 我建议您将所有jar文件放在一个目录中,例如lib。 It is easier to maintain. 易于维护。 Bin directory should contain scripts. Bin目录应包含脚本。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM