Подтвердить что ты не робот

Не удалось найти или загрузить основной класс с помощью Jar File

Я пытаюсь загрузить банку с помощью

@echo off
java -jar Test.jar
pause

С манифестом

Manifest-Version: 1.0
Main-Class: classes.TestClass

В каталоге Jar я могу отчетливо видеть файл classes\TestClass, когда я его извлекаю.

Изменить: classes.TestClass имеет public static void main(String[] args).

Торможение пакетов в classes.TestClass составляет package classes;

Но я все еще продолжаю получать сообщение об ошибке

Could not find or load main class classes.TestClass

Я прошел через все, что смог найти с этой проблемой, и ничто из этого не помогает.

Я пробовал редактировать classpath, переделывая манифест, устанавливая новую JRE.

Что еще я должен делать?

4b9b3361

Ответ 1

Я начал работать так:

TestClass.Java

package classes;

public class TestClass {

    public static void main(String[] args) {
        System.out.println("Test");
    }

}

Используйте javac в командной строке для создания TestClass.class. Поместите TestClass.class в classes/ папок classes/.

MANIFEST.MF

Manifest-Version: 1.0
Main-Class: classes.TestClass

Затем запустите

jar cfm test.jar MANIFEST.MF classes/

Затем запустите его как

java -jar test.jar

Ответ 2

java -cp "full-path-of-your-jar" Главная

для запуска любого другого класса, имеющего "public static void main" в некотором пакете,

java -cp "full-path-of-your-jar" package1.package2.packages-hierarchy.ClassHavingMain

Ответ 3

1.Создание текстового файла вызывает Manifest.txt и предоставляет значение как

Основной класс: classes.TestClass

2.Создайте банку как

jar cfm test.jar Manifest.txt classes/*. class

3. Запустите банку как

java -jar test.jar

Ответ 4

У меня была одна и та же проблема, в конце концов, потому что я скопировал и вставил код без слова, и это был немного другой тип используемого символа "-", вот и все, о чем я могу думать, когда я набрал его вручную работал

Ответ 5

Это очень сложно отлаживать без полной информации.

Два наиболее вероятных объекта на этом этапе - это то, что либо файл в банке не хранится в каталоге WITHIN JAR, либо что это не правильный файл.

Вам нужно хранить TestClass.class - некоторые люди, новые в этом магазине, хранят исходный файл TestClass.java.

И вам нужно создать файл jar, чтобы появился TestClass.class с путём классов. Убедитесь, что это не "/classes". Используйте zip для просмотра файла и убедитесь, что он имеет путь к "классам".

Ответ 6

У меня была аналогичная проблема, которую я мог решить, предоставив exec-privilege для всех родительских папок, в которых находится jar файл (в системе Linux).

Пример:

/folder1/folder2/folder3/executable.jar

все 3 папки (folder1, folder2 и folder3), а также исполняемый файл .jar необходимо выполнить-привилегию для текущего пользователя, в противном случае возвращается ошибка "Не удалось найти или загрузить основной класс...".

Ответ 7

У меня была странная проблема, когда некорректная запись в MANIFEST.MF приводила к потере загрузки. Это было, когда я пытался запустить очень просто scala программу:

Неправильно:

Main-Class: jarek.ResourceCache
Class-Path: D:/lang/scala/lib/scala-library.jar

Правильно:

Main-Class: jarek.ResourceCache
Class-Path: file:///D:/lang/scala/lib/scala-library.jar

С неправильной версией я получал загадочное сообщение, то же самое сделал OP. Вероятно, при анализе файла манифеста он должен сказать что-то вроде искаженного исключения url.

Использование абсолютного пути в файле манифеста - это то, что использует IntelliJ для предоставления длинного пути к классам для программы.

Ответ 8

По крайней мере, так я сделал следующее:

Если у вас есть вложенное дерево src (скажем, com.test.myclass.MyClass) и вы компилируете из корневого каталога, вам нужно сделать следующее:

1), когда вы создаете банку (обычно помещаете ее в script):   jar -cvfm my.jar com/test/myclass/manifest.txt com/test/myclass/MyClass.class

2) манифест должен выглядеть так:

Mainfest-версия: 1.0 Основной класс: com.test.myclass.MyClass Класс-путь:. my.jar

3) Теперь вы можете запустить банку из любого места, как это:

java -jar my.jar

Надеюсь, это поможет кому-то

Ответ 9

Я следую следующей инструкции для создания исполняемого файла .jar в Eclipse. Затем запустите команду "java -jar.jar", чтобы запустить программу.

Он заботится о создании mainfest и включает в себя части основного и библиотечного файлов для вас.

http://java67.blogspot.com/2014/04/how-to-make-executable-jar-file-in-Java-Eclipse.html

Ответ 10

Я знаю, что это старый вопрос, но у меня была эта проблема в последнее время, и ни один из ответов не помог мне. Однако комментарий Коррала по поводу ответа Райана Аткинсона подсказывал мне проблему.

У меня были все мои скомпилированные файлы классов в target/classes, которые не являются пакетами в моем случае. Я пытался упаковать его с помощью jar cvfe App.jar target/classes App из корневого каталога моего проекта, так как мой класс App был в невынужденном пакете по умолчанию.

Это не работает, так как недавно созданный App.jar будет иметь класс App.class в каталоге target/classes. Если вы попытаетесь запустить эту банку с помощью java -jar App.jar, она пожалуется, что не сможет найти класс App. Это связано с тем, что пакеты внутри App.jar не соответствуют фактическим пакетам в проекте.

Это можно решить, создав банку непосредственно из каталога target/classes, используя jar cvfe App.jar. App jar cvfe App.jar. App. На мой взгляд, это довольно громоздко.

Простое решение состоит в том, чтобы перечислить папки, которые вы хотите добавить, с -C опции -C вместо того, чтобы использовать список каталогов по умолчанию. Итак, в моем случае правильной командой является java cvfe App.jar App -C target/classes. , Это напрямую добавит все файлы в каталог target/classes в корень App.jar, тем самым решая проблему.

Ответ 11

Эта ошибка появляется даже в том случае, если вы пропустили "-" по ошибке перед словом jar

Неправильная команда java jar test.jar

Правильная команда java -jar test.jar

Ответ 12

У меня была эта ошибка, потому что я написал неправильный Class-Path в моем MANIFEST.MF

Ответ 13

Я получил такое же сообщение об ошибке после передачи файла JAR по FTP и забыл установить его в двоичном режиме.

Ответ 14

У меня есть одна неверная библиотека пути к классам и я решаю ту же ошибку