JAR主类未找到问题

时间:2011-09-08 22:47:26

标签: java 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

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时它是默认的)

@戴夫牛顿:对不起,(首先,谢谢你),你可以更具体一点吗?我不明白我应该做什么。我对这些东西并不是很好

啊,如果你的意思是这个包不叫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:ClassFiles / Main(错误的名称: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)     在java.net.URLClassLoader $ 1.run(URLClassLoader.java:212)     at java.security.AccessController.doPrivileged(Native Method)     在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)

无法找到主类:ClassFiles.Main。程序将退出。

// Main.java代码

http://pastebin.com/Xh9emcYH

3 个答案:

答案 0 :(得分:3)

运行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

答案 1 :(得分:1)

在包含以下内容的基本文件夹中创建清单文件:

Manifest-Version: 1.0
Main-Class: ClassFiles.Main

然后运行:

jar cvfm Project.jar manifestFile.txt ClassFiles/*

希望有所帮助:)

答案 2 :(得分:0)

要运行jar文件,您应该使用Java Sun Developing Basics website中指定的指示。