JAR主类没找到问题
我必须创建一个JAR文件(不使用任何IDE)
这就是我正在做的事情:
我有一个名为Project的文件夹,这是主要文件夹,在这个文件夹中我有两个文件夹和一个pdf文件。
一个名为ClassFiles ,包含我项目的所有“.class”文件
另一个名为JavaFiles ,包含所有“.java”文件。
该文件是我必须包含的关系,虽然没有任何相关性,并且被称为Info.pdf。
我有的错误是这样的:
我的主要类(冗余,我的意思是起始的,使用“public static void main(String [] args)”)称为Main
我正在使用的命令行是:
jar -cfe Project.jar ClassFiles.Main JavaFiles ClassFiles INFO.pdf
我得到错误Could not find the main class: ClassFiles.Main. Program will exit
Could not find the main class: ClassFiles.Main. Program will exit
PS:在ClassFiles文件夹中我有很多classname $ 1,classname $ 2文件。 我不知道它是否相关。 我甚至有Main和另一个Main $ 1 。
我明天需要给这个JAR,所以我非常绝望。
先感谢您!
Exception in thread "main" java.lang.NoClassDefFoundError: ClassFiles/Main (wrong name: Main) at java.lang.ClassLoader.defineClass1(Native Method) at java.lang.ClassLoader.defineClass(ClassLoader.java:634) at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:142) at java.net.URLClassLoader.defineClass(URLClassLoader.java:277) at java.net.URLClassLoader.access$000(URLClassLoader.java:73) at java.net.URLClassLoader$1.run(URLClassLoader.java:212) at java.security.AccessController.doPrivileged(Native Method) at java.net.URLClassLoader.findClass(URLClassLoader.java:205) at java.lang.ClassLoader.loadClass(ClassLoader.java:321) at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:294) at java.lang.ClassLoader.loadClass(ClassLoader.java:266) Could not find the main class: ClassFiles.Main. Program will exit
@erikson:ClassFiles只是我用来包含所有.class的文件夹,仅此而已…我所做的没有包(当我使用Eclipse时它是默认的)
@Dave Newton:对不起,(首先,谢谢你),你可以更具体一点吗? 我不明白我应该做什么。 我对这些东西并不是很好
啊,如果你的意思是这个包不叫Project,而Progetto只是因为我用英语翻译它。 不确定这是否也是你所指的。
我有ClassFiles目录中的Main.class和JavaFiles目录中的Main.java
这正是我所做的和结果:
ascal @ AscaL~ / Desktop / Progetto $ jar -cfe Progetto.jar ClassFiles.Main ClassFiles JavaFiles Info.pdf
ascal @ AscaL~ / Desktop / Progetto $ java -jar Progetto.jar
线程“main”java.lang.NoClassDefFoundError中的exception:java的java.lang.ClassLoader.defineClass1(Native Method)中的java.lang.NoClassDefFoundError:ClassFiles / Main(错误的名称:Main),java的java.lang.ClassLoader.defineClass(ClassLoader.java:634) .security.SecureClassLoader.defineClass(SecureClassLoader.java:142)at java.net.URLClassLoader.defineClass(URLClassLoader.java:277)at java.net.URLClassLoader.access $ 000(URLClassLoader.java:73)at java.net.URLClassLoader $ 1.run(URLClassLoader.java:212)在java.security.AccessController.doPrivileged(Native Method)java.net.URLClassLoader.findClass(URLClassLoader.java:205)java.lang.ClassLoader.loadClass(ClassLoader.java: 321)at sun.misc.Launcher $ AppClassLoader.loadClass(Launcher.java:294)at java.lang.ClassLoader.loadClass(ClassLoader.java:266)
找不到主类:ClassFiles.Main。 程序将会退出。
// Main.java代码
http://pastebin.com/Xh9emcYH
运行jar
命令时出现错误? 对我来说很好。
$ tree . ├── ClassFiles │ └── Main.class ├── JavaFiles │ └── Main.java └── Project.jar $ jar -cfe Project.jar ClassFiles.Main JavaFiles ClassFiles $ jar -tf Project.jar META-INF/ META-INF/MANIFEST.MF JavaFiles/ JavaFiles/Main.java ClassFiles/ ClassFiles/Main.class
当然,如果你通过java -jar Project.jar
运行它,并且Main类不在ClassFiles包中,它将会中断。 什么包是Main类?
$ cat META-INF/MANIFEST.MF Manifest-Version: 1.0 Created-By: 1.6.0_26 (Apple Inc.) Main-Class: ClassFiles.Main
在基本文件夹中创建清单文件,其中包含:
Manifest-Version: 1.0 Main-Class: ClassFiles.Main
然后运行:
jar cvfm Project.jar manifestFile.txt ClassFiles/*
希望能帮助到你 :)
要运行jar文件,您应该使用Java Sun Develop Basics网站中给出的指定说明。