从命令行创建jar文件 [英] Create jar file from command line
问题描述
我有以下目录层次结构:
SigarTest
src
SigarTest
。 java文件
bin
SigarTest
.class文件
SigarTest是一个包名。根文件夹在jdk的bin文件夹中。
从那里,我运行以下命令来创建我的项目的jar文件 -
./ jar cfe temp .jar SigarTest.SigarMain SigarTest / bin / tools.jar sigar.jar mongo-2.7.3.jar
其中tools.jar,mongo-2.7.3.jar和sigar.jar是必需的,并且位于与根目录(jdk的bin文件夹)相同的文件夹中。但是,在运行它,我得到
ClassNotFoundException:SigarTest.SigarMain
解决方案使用
a href =http://docs.oracle.com/javase/6/docs/technotes/tools/windows/jar.html =nofollow>-C
选项
暂时更改目录在执行
jar
命令期间,在处理以下 inputfiles 时执行cd em>参数。
如果在问题中执行
jar
列出temp.jar的内容,您将看到类似于以下内容的输出:$ rm -rf temp.jar
$ jar cfe temp.jar SigarTest.SigarMain SigarTest / bin / tools.jar sigar.jar mongo-2.7.3.jar
$ jar tf temp.jar
META-INF /
META-INF / MANIFEST.MF
SigarTest / bin /
SigarTest / bin / SigarTest /
SigarTest / bin / SigarTest / SigarMain.class
tool.jar
sigar .jar
mongo-2.7.3.jar
$ java -jar temp.jar
线程main中的异常java.lang.NoClassDefFoundError:SigarTest / SigarMain
引发: java.lang.ClassNotFoundException:SigarTest.SigarMain
at java.net.URLClassLoader $ 1.run(URLClassLoader.java:202)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:190)
at java.lang.ClassLoader.loadClass(ClassLoader.java:306)
at sun.misc.Launcher $ AppClassLoader.loadClass(Launcher。 java:301)
at java.lang.ClassLoader.loadClass(ClassLoader.java:247)
请注意,在temp.jar中有SigarTest / bin不正确。执行temp.jar抛出
ClassNotFoundException
,因为SigarMain
在包中SigarTest.bin.SigarTest
。现在考虑下面的jar
命令,它使用-C
dir strong>选项:$ rm -rf temp.jar
$ jar cfe temp.jar SigarTest.SigarMain -C SigarTest / bin /。 tools.jar sigar.jar mongo-2.7.3.jar
$ jar tf temp.jar
META-INF /
META-INF / MANIFEST.MF
SigarTest /
SigarTest / SigarMain.class
tools.jar
sigar.jar
mongo-2.7.3.jar
$ java -jar temp.jar
SigarMain
在正确的软件包中,执行temp.jar不会抛出ClassNotFoundException
。I have the following directory hierarchy :
SigarTest src SigarTest .java files bin SigarTest .class files
Here,SigarTest is a package name. The root folder is in the bin folder of the jdk. From there, im running the following command to create a jar file of my project -
./jar cfe temp.jar SigarTest.SigarMain SigarTest/bin/ tools.jar sigar.jar mongo-2.7.3.jar
where tools.jar, mongo-2.7.3.jar and sigar.jar are required and are in the same folder as root directory (bin folder of jdk). However, on running it, i get
ClassNotFoundException : SigarTest.SigarMain
What am i doing wrong ?
解决方案Use the
-C
dir option whichTemporarily changes directories (
cd
dir) during execution of thejar
command while processing the following inputfiles argument.If you execute the
jar
command in your question and list the contents of temp.jar, you will see output similar to the following:$ rm -rf temp.jar $ jar cfe temp.jar SigarTest.SigarMain SigarTest/bin/ tools.jar sigar.jar mongo-2.7.3.jar $ jar tf temp.jar META-INF/ META-INF/MANIFEST.MF SigarTest/bin/ SigarTest/bin/SigarTest/ SigarTest/bin/SigarTest/SigarMain.class tools.jar sigar.jar mongo-2.7.3.jar $ java -jar temp.jar Exception in thread "main" java.lang.NoClassDefFoundError: SigarTest/SigarMain Caused by: java.lang.ClassNotFoundException: SigarTest.SigarMain at java.net.URLClassLoader$1.run(URLClassLoader.java:202) at java.security.AccessController.doPrivileged(Native Method) at java.net.URLClassLoader.findClass(URLClassLoader.java:190) at java.lang.ClassLoader.loadClass(ClassLoader.java:306) at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:301) at java.lang.ClassLoader.loadClass(ClassLoader.java:247)
Note that having SigarTest/bin in temp.jar is incorrect. Executing temp.jar throws the
ClassNotFoundException
sinceSigarMain
is in packageSigarTest.bin.SigarTest
. Now consider the followingjar
command that uses the-C
dir option:$ rm -rf temp.jar $ jar cfe temp.jar SigarTest.SigarMain -C SigarTest/bin/ . tools.jar sigar.jar mongo-2.7.3.jar $ jar tf temp.jar META-INF/ META-INF/MANIFEST.MF SigarTest/ SigarTest/SigarMain.class tools.jar sigar.jar mongo-2.7.3.jar $ java -jar temp.jar
SigarMain
is in the correct package and executing temp.jar does not throw aClassNotFoundException
.这篇关于从命令行创建jar文件的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!