我有以下目录层次结构:
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中…