java JAR 主类未找到问题
声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow
原文地址: http://stackoverflow.com/questions/7355407/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me):
StackOverFlow
JAR main class not found problem
提问by AscaL
I have to create a JAR file (without using any IDE)
我必须创建一个 JAR 文件(不使用任何 IDE)
That's what I'm doing:
这就是我正在做的:
I got a folder named Project, this is the main one, in this one i two folders and a pdf file.
我有一个名为 Project 的文件夹,这是主要的文件夹,在这个文件夹中我有两个文件夹和一个 pdf 文件。
one named ClassFilesthat contains all the ".class" files of my project
一个名为ClassFiles包含我项目的所有“.class”文件
the other one named JavaFilesthat contains all the ".java" files.
另一个名为JavaFiles 的文件包含所有“.java”文件。
the file is a relation that i have to include, nothing relevant though, and is called Info.pdf.
该文件是我必须包含的一个关系,尽管没有任何相关性,并且称为 Info.pdf。
The error i have is this:
我的错误是这样的:
My main class (is redundant, i mean the starting one, with "public static void main(String[] args)") is called Main
我的主类(是多余的,我的意思是起始类,带有“public static void main(String[] args)”)被称为Main
the command line i'm using is:
我使用的命令行是:
jar -cfe Project.jar ClassFiles.Main JavaFiles ClassFiles INFO.pdf
jar -cfe Project.jar ClassFiles.Main JavaFiles ClassFiles INFO.pdf
i get the error Could not find the main class: ClassFiles.Main. Program will exit
我得到了错误 Could not find the main class: ClassFiles.Main. Program will exit
PS: in the ClassFiles folder i have a lot of classname$1, classname$2 files. i don't know if it's relevant. I even have the Mainwith and another Main$1.
PS:在 ClassFiles 文件夹中,我有很多 classname$1、classname$2 文件。我不知道它是否相关。我什至有Mainwith 和另一个Main$1。
I need to give this JAR tomorrow, so i'm quite desperate.
我明天需要给这个 JAR,所以我很绝望。
Thank you in advance!
先感谢您!
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$ 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
0(URLClassLoader.java:73)
at java.net.URLClassLoader.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 is just a folder i made to contain all the .class, nothing more... there is no package in what i did (it was the default one when i used Eclipse)
@erikson:ClassFiles 只是我用来包含所有 .class 的文件夹,仅此而已……我所做的没有包(这是我使用 Eclipse 时的默认包)
@ Dave Newton: sorry man, (first of all thank you), could u be a little more specific? i'm not understanding what i should do. i'm not really good with this stuff
@戴夫牛顿:对不起,(首先谢谢你),你能不能说得更具体一点?我不明白我应该做什么。我不太擅长这些东西
ah, if you mean that the package is not called Project but Progetto is just becouse i translated it in english. not sure if that's what you are referring too.
啊,如果你的意思是这个包不叫 Project 而 Progetto 只是因为我把它翻译成英文。不知道这是否也是你所指的。
I have the Main.class in the ClassFiles directory and Main.java in the JavaFiles dir
我在 ClassFiles 目录中有 Main.class,在 JavaFiles 目录中有 Main.java
That's exactly what i did and the result:
这正是我所做的和结果:
ascal@AscaL ~/Desktop/Progetto $ jar -cfe Progetto.jar ClassFiles.Main ClassFiles JavaFiles Info.pdf
ascal@AscaL ~/Desktop/Progetto $ jar -cfe Progetto.jar ClassFiles.Main ClassFiles JavaFiles Info.pdf
ascal@AscaL ~/Desktop/Progetto $ java -jar Progetto.jar
ascal@AscaL ~/Desktop/Progetto $ java -jar Progetto.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)
线程“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) 在 java.net.URLClassLoader.defineClass(URLClassLoader.java:277) 在 java.net.URLClassLoader.access$000(URLClassLoader.java:73) 在 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) 在 sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:294) 在 java.lang.ClassLoader.loadClass(ClassLoader.java:266)
Could not find the main class: ClassFiles.Main. Program will exit.
找不到主类:ClassFiles.Main。程序将会退出。
//Code of Main.java
//Main.java代码
回答by Dave Newton
You get that error when you run the jar
command? Works fine for me.
运行jar
命令时出现该错误?对我来说很好用。
$ cat META-INF/MANIFEST.MF
Manifest-Version: 1.0
Created-By: 1.6.0_26 (Apple Inc.)
Main-Class: ClassFiles.Main
Of course, if you run it via java -jar Project.jar
, and the Main class isn't in the ClassFiles package, it'll break. What package is the Main class in?
当然,如果您通过 运行它java -jar Project.jar
,并且 Main 类不在 ClassFiles 包中,它就会中断。Main 类在哪个包中?
Manifest-Version: 1.0
Main-Class: ClassFiles.Main
回答by Gigab0rt
Create a manifest file in the base folder containing:
在基本文件夹中创建一个清单文件,其中包含:
jar cvfm Project.jar manifestFile.txt ClassFiles/*
Then run:
然后运行:
##代码##Hope it helps :)
希望能帮助到你 :)
回答by Kaushik Shankar
To run a jar file, you should use the prescribed directions given in the Java Sun Developing Basics website.
要运行 jar 文件,您应该使用Java Sun 开发基础网站中给出的规定说明。