罐子不会被执行

时间:2013-09-11 19:00:08

标签: java jar

我试图通过

运行我的javaprojekt
java -jar myproject.jar

得到了:

Failed to load Main-Class manifest attribute from myproject.jar

这怎么可能?我使用Netbeans

开箱即可使用我的罐子

好的,我发现它看起来好像是一个清单文件,所以这里是:

Manifest-Version: 1.0
Archiver-Version: Plexus Archiver
Created-By: Apache Maven
Built-By: someone
Build-Jdk: 1.7.0_25

好的,所以这是课程:

public class Starter {

    private static Control c;

    /**
    *
    * @param 
    */
    public static void main(String [ ] args) {
        Control c = new Control();
    }

    public static Control getC() {
        return c;
    }
}

无论如何,如果我尝试

,甚至无视罐子
java -cp myproject.jar control.Starter

我得到一个classNotFoundException

但是当我从Netbeans内部开始时,它确实可以正常工作。

好吧,显然我在第一次创建项目时有一个带有main的默认类。 我现在只删除了那个类并且再次清理并构建。

这意味着我的清单现在看起来像:

Manifest-Version: 1.0
Archiver-Version: Plexus Archiver
Created-By: Apache Maven
Built-By: someone
Build-Jdk: 1.7.0_25
Main-Class: default.Starter

首先,我想知道这是怎么发生的,因为Starter显然是在包控制中,而不是在默认包中。

另一方面,我仍然得到:

  Failed to load Main-Class manifest attribute from myproject.jar

有人可以帮助我吗?

好吧,如果我尝试使用java -cp等编译,我会得到一个异常:

 Exception in thread "main" java.lang.UnsupportedClassVersionError: control/Starter : Unsupported major.minor version 51.0
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: control.Starter. Program will exit.

有人可以这样回答我,请:

这通常是项目中的错误还是其他地方的错误? 这意味着,如果我尝试在另一台计算机上构建相同的项目并且路径正确,我会有更好的成功机会吗? 我是否有可能设法编写不可能成为可执行jar的代码?

2 个答案:

答案 0 :(得分:2)

您需要在清单文件中指定主类

Main-Class: <package>.Starter

或者您可以通过使用

传递主类来运行您的jar
java -cp myproject.jar <package>.Starter

在这两种情况下,主要班级必须是完全合格的,即<package-name>.<class-name>

答案 1 :(得分:1)

您未指定Main-Class参数。

java -jar尝试执行jar时,它无法确定哪个方法包含main方法。多个类可以包含它,因此无法区分。要解决此问题,您必须在清单中指定Main-Class参数。

添加:Main-Class: Starter会修复它。

相关问题