从命令行创建jar文件 [英] Create jar file from command line

查看:139
本文介绍了从命令行创建jar文件的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有以下目录层次结构:

  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 which

Temporarily changes directories (cd dir) during execution of the jar 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 since SigarMain is in package SigarTest.bin.SigarTest. Now consider the following jar 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 a ClassNotFoundException.

这篇关于从命令行创建jar文件的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆