0

我试图通过运行我的 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 的代码?

4

2 回答 2

2

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

Main-Class: <package>.Starter

或者你可以通过传递主类来运行你的jar

java -cp myproject.jar <package>.Starter

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

于 2013-09-11T19:17:40.053 回答
1

您没有指定Main-Class参数。

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

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

于 2013-09-11T19:18:11.217 回答