После создания JAR-файла командная строка возвращает 'Ошибка: не удалось найти или загрузить основной класс ExampleProgram`? - PullRequest
0 голосов
/ 20 октября 2019

JAR-файл не запускается, вместо этого возвращается

Error: Could not find or load main class ExampleProgram
Caused by: java.lang.NoClassDefFoundError: ExampleProject/ExampleProgram (wrong name: ExampleProgram)

Я попытался удалить файл класса, а затем заново создать JAR-файл. Я пытался удалить и заново создать программу с нуля. Я попытался создать файл JAR без манифеста.

package ExampleProject;

public class ExampleProgram {

    public static void main(String[] args) {

        System.out.println("Hello, World!");

    }

}

Именно так я пытался создать файл JAR в командной строке.

Josephs-MBP:program jepappano4$ ls
ExampleProgram.class    ExampleProgram.java
Josephs-MBP:program jepappano4$ java ExampleProgram
Error: Could not find or load main class ExampleProgram
Caused by: java.lang.NoClassDefFoundError: ExampleProject/ExampleProgram (wrong name: ExampleProgram)
Josephs-MBP:program jepappano4$ ls
ExampleProgram.class    ExampleProgram.java
Josephs-MBP:program jepappano4$ ls
ExampleProgram.class    ExampleProgram.java manifest.mf
Josephs-MBP:program jepappano4$ jar -cvfm myprogram.jar manifest.mf *.class
added manifest
adding: ExampleProgram.class(in = 450) (out= 301)(deflated 33%)
Josephs-MBP:program jepappano4$ java -jar myprogram.jar
Error: Could not find or load main class ExampleProgram
Caused by: java.lang.NoClassDefFoundError: ExampleProject/ExampleProgram (wrong name: ExampleProgram)

Я следую инструкциям по созданию файлов JAR и ожидал, чтоэтот процесс работает, но это не так. Что я здесь делаю неправильно?

Не уверен, важно это или нет, но я использую Java 11.

1 Ответ

0 голосов
/ 20 октября 2019

Ошибка «неправильное имя» является ключевой ошибкой здесь. Вот что это значит:

В Java полное имя класса - это его пакет, за которым следует точка, а затем имя класса. Итак, ваше полное имя для этого класса: ExampleProject.ExampleProgram.

Чтобы начать их, вы должны указать это полное имя в своем манифесте: для него должна быть запись, похожая на:

Main-Class: ExampleProject.ExampleProgram

Кроме того, структура папок должна соответствовать точкам. Итак, jar-файл (который на самом деле является просто zip-файлом) должен содержать внутри него на корневом уровне каталог с именем ExampleProject, и для этого каталога нужен файл с именем ExampleProgram.class.

Вы его получилиили оба из тех, кто не прав, вызывая эту ошибку. Вы можете проверить структуру файла JAR следующим образом:

jar tvf myjar.jar

вы должны увидеть список:

ExampleProject/ExampleProgram.class

в этом точном месте.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...