Не удалось найти или загрузить основной класс с помощью 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.
Что еще я должен делать?
Ответы
Ответ 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
У меня есть одна неверная библиотека пути к классам и я решаю ту же ошибку