Не удается найти или загрузить основной класс в файле .jar - PullRequest
0 голосов
/ 22 мая 2018

В течение 2 часов я искал решение моей проблемы, пробовал бесчисленное количество решений, и проблема все еще остается нерешенной.

У меня есть игровой проект с несколькими пакетами;геометрия, уровни, декорации и игры.Внутри игрового пакета находится gameRun.java

package game;
public class gameRun {

/**
 * Program entry point.
 * @param args the arguments for the levels
 */
public static void main(String args[]) {
    ... some code
}
}

, и у меня есть следующий файл манифеста:

Main-Class: game.gameRun
Class-Path: someExternalGraphicTool.jar
//newline here

Я собираю всю свою игру, используя следующую команду: (папка bin ужесуществует).

  javac -d bin src/geometry/*.java src/decoration/*.java src/levels/*.java src/game/*.java

Затем я преобразую свои скомпилированные классы в исполняемый файл .jar, используя команду:

jar cvfm t.jar manifest.mf bin/geometry/*.class bin/decoration/*.class bin/levels/*.class bin/game/*.class 

Затем я пытаюсь запустить свой t.jar, используя:

java -jar t.jar 
//or 
java -cp .:t.jar game.gameRun

, которые оба выдают ошибку «Ошибка: не удалось найти или загрузить основной класс game.gameRun». Однако, когда я разархивирую файл jar, внутри каталога bin / game я вижу файл gameRun.classи внутри файла META-INF \ MANIFEST.MF я все еще вижу, что для Main-Class установлено значение game.gameRun.

Обратите внимание, что я работаю на удаленном сервере Linux, в командной строке иJAR-файл не работает, даже если я загружаю его на свой компьютер с Windows 10.

Что я сделал не так во время этого процесса?Спасибо за любую помощь.

1 Ответ

0 голосов
/ 22 мая 2018

Ваши классы находятся в неправильной структуре внутри файла jar из-за папки bin.Мое предложение: упаковать все в банку, начиная с папки bin.

Теперь, когда вы извлечете jar, вы увидите 2 папки: META-INF и bin.

Есливы сделаете банку из папки bin и увидите: META-INF и игру, и она будет работать.

Она не работает для вас просто, потому что она не может найти основной класс, так как онавнутри корзины / игры / YourClass.class, а не в игре / YourClass.class.

...\bin> jar cvfm t.jar manifest.mf geometry/*.class decoration/*.class levels/*.class game/*.class

А затем просто:

...\bin> java -jar t.jar

...