简体   繁体   中英

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

I have created the jar file,and I run it using command:-

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

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)

... 1 more

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. 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...

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. And when I mention only jar file name "hector-0.6.0-17.jar",and I run it using command:-

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:-

--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

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.

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:

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/

I'd recommend you to put all your jar files in one directory, eg lib. It is easier to maintain. Bin directory should contain scripts.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

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