当前位置: 首页 > 面试题库 >

从命令行创建jar文件

况安然
2023-03-14
问题内容

我有以下目录层次结构:

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

我究竟做错了什么 ?


问题答案:

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



 类似资料:
  • 我已经编辑了这个问题,现在正是我所做的: 我想从命令行中的一些. class文件创建一个. jar文件。 我在Eclipse上工作,创造了: myProject项目,在它:myPackage包中,在它的:myClass类中。然后我在命令行中写道: 我得到了这个: 这真的创造了myJar。jar文件。现在,我想检查这个过程是否成功完成,所以我从jar中提取了这个类: 我得到了这个: 这只为我创建了M

  • 我得到了这个文件,但它不同于eclipse的一个输出。这个大约是100KB,eclipse输出超过2000KB。 我可以使用什么正确的命令来获得与Eclipse相同的文件?

  • 本文向大家介绍laravel 创建命令行命令的图文教程,包括了laravel 创建命令行命令的图文教程的使用技巧和注意事项,需要的朋友参考一下 1. 在命令行输入 php artisan make:command NiceWork(此处根据自己想要创建的命名) 2. 命令完成后,会在 目录中看到这个文件 3. 进入Console/Kernel.php , 注册该命令 4. 然后进入 NiceWor

  • 问题内容: 我编写了一个名为Main.java的.java文件,并已在Windows命令提示符下使用javac对其进行了编译。编译器正在创建多个.class文件(称为Main.class,Main $ 1.class和Main $ 2.class,大概是因为我的Main.java文件中有匿名内部类)。我试图创建一个可运行的.jar文件,以便双击运行该应用程序(它是Java Swing应用程序)的快

  • 我编写了一个名为Main.java的. java文件,并使用Windows命令提示符中的javac对其进行了编译。编译器正在创建多个. class文件(称为Main.class,Main$1.class, 然后,命令提示符输出以下文本: 尽管如此,当我双击文件时。jar文件在Windows资源管理器中,简单地说,什么都不会发生。没有打开swing应用程序。 希望有人能帮我解决这个问题。非常感谢。

  • 问题内容: 我正在尝试使用Java从命令行(Windows)调用类(主方法)。 该类导入其他类(其他jar)。 我总是从主程序导入的类中获得“找不到类异常”。 这是我尝试过的: 添加一个CLASSPATH env。var与所引用的lib所在的路径(不起作用) 我从命令行调用“ ” 时尝试了所有这些不同的参数:(lib是引用的jar所在的位置) 我尝试将所有引用的jar打包到我的主类所在的jar中…