我试图通过
运行我的javaprojektjava -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的代码?
答案 0 :(得分:2)
您需要在清单文件中指定主类
Main-Class: <package>.Starter
或者您可以通过使用
传递主类来运行您的jarjava -cp myproject.jar <package>.Starter
在这两种情况下,主要班级必须是完全合格的,即<package-name>.<class-name>
答案 1 :(得分:1)
您未指定Main-Class
参数。
当java -jar
尝试执行jar时,它无法确定哪个方法包含main
方法。多个类可以包含它,因此无法区分。要解决此问题,您必须在清单中指定Main-Class
参数。
添加:Main-Class: Starter
会修复它。