2013-09-11 5 views
0

я попытался запустить мой javaprojekt черезбанка не будет выполнена

java -jar myproject.jar 

и получил:

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

Как это может быть? Я получил мою банку довольно много из коробки, используя Netbeans

Ok, я нашел то, что выглядит, как будто это может быть файл манифеста, так вот она:

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 

Я получаю classNotFoundExc eption

Однако, работаю нормально, когда я начинаю изнутри Netbeans.

Хорошо, видимо, у меня был класс по умолчанию с основным в нем, когда я впервые создал проект. Я только сейчас удалил этот класс и снова очистил и построил.

Это означает, что мой манифест теперь выглядит так:

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. 

Может кто-нибудь ответить мне только это, пожалуйста:

Является ли это, как правило, ошибка в проекта или еще где-нибудь еще? Смысл, если я попытаюсь построить тот же проект на другом компьютере с предположительно правильными путями, у меня будут лучшие шансы на успех? Возможно ли, что мне удалось написать код, который нельзя сделать исполняемым банком?

+0

Предоставьте файл манифеста и пакет файла загрузочного класса, и мы можем сообщить вам, было ли оно настроено правильно. Кроме того, перед сборкой баннера убедитесь, что в конце файла манифеста была пустая строка. – Obicere

+0

Что такое файл манифеста? На самом деле я думал, что IDE должна была убедиться, что не нужно думать о таких вещах. – newnewbie

+0

файл манифеста есть, я думаю. Что такое загрузочный класс? О, да, есть пустая строка. – newnewbie

ответ

2

Вам необходимо указать главный класс в вашем файле манифеста

Main-Class: <package>.Starter 

или вы можете запустить банку, как это пропусканием главный класс с

java -cp myproject.jar <package>.Starter 

В обоих случаях основной класс должен быть полностью квалифицированным, т.е. <package-name>.<class-name>

1

Вы не указали параметр Main-Class.

Когда java -jar пытается выполнить банку, он не может определить, какой метод содержит метод main. Несколько классов могут содержать его, поэтому дифференцирование невозможно. Чтобы противостоять этой проблеме, вы должны указать параметр Main-Class в манифесте.

Add: Main-Class: Starter исправит это.

+0

, но, видимо, я не могу записать в файл манифеста .... как я могу это изменить? – newnewbie

+1

Вы должны уметь. Попробуйте создать свой собственный файл манифеста, это сделает простой текстовый редактор или изменит свойства файла манифеста внутри netbeans. – Obicere

+0

Я стараюсь. Netbeans говорит мне, что он читается только потому, что он находится в банке – newnewbie

Смежные вопросы