从命令行创建jar文件

发布于 2021-01-30 16:56:09

我有以下目录层次结构:

SigarTest
 src
    SigarTest
     .java files
 bin
    SigarTest
     .class files

在这里,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

我究竟做错了什么 ?

关注者
0
被浏览
93
1 个回答
  • 面试哥
    面试哥 2021-01-30
    为面试而生,有面试问题,就找面试哥。

    使用 -C 目录
    选项
    哪些

    临时改变目录(cd DIR 的执行期间)jar命令处理下列 inputfiles 参数。

    如果您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
    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)
    

    请注意,在temp.jar中使用SigarTest /
    bin是不正确的。执行temp.jar会ClassNotFoundException因为SigarMain在包中而抛出该消息SigarTest.bin.SigarTest。现在考虑以下jar使用
    -C dir 选项的命令:

    $ 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



知识点
面圈网VIP题库

面圈网VIP题库全新上线,海量真题题库资源。 90大类考试,超10万份考试真题开放下载啦

去下载看看