Поврежденный файл jar - PullRequest
       45

Поврежденный файл jar

31 голосов
/ 26 сентября 2011

Я создал файл JAR в Windows 7, используя Eclipse.Когда я пытаюсь открыть файл JAR, он говорит, неверный или поврежденный файл JAR.Кто-нибудь может подсказать, почему файл JAR недействителен?

Ответы [ 10 ]

39 голосов
/ 26 сентября 2011

Это произойдет, если дважды щелкнуть файл JAR в проводнике Windows, но сам JAR фактически не является исполняемым JAR. Реальный исполняемый JAR должен иметь хотя бы класс с методом main() и ссылаться на него в MANIFEST.MF.

В Eclispe вам нужно экспортировать проект как исполняемый файл JAR вместо файл JAR , чтобы получить настоящий исполняемый JAR.

Или, если ваш JAR-файл представляет собой контейнер из нескольких тесно связанных классов (библиотеки), вам не следует дважды щелкать по нему, а открывать его с помощью какого-либо инструмента ZIP. Проводник Windows, а именно по умолчанию, связывает файлы JAR с java.exe, что не будет работать для таких библиотек JAR.

17 голосов
/ 13 декабря 2013

Это регулярно происходит, когда вы меняете расширение в JAR для ZIP, извлекаете содержимое zip и вносите некоторые изменения в файлы, такие как изменение файла MANIFEST.MF, что является очень распространенным случаем, во многих случаях Eclipse не генерирует Манифест файла, как мы хотим, или, возможно, мы хотели бы изменить значения CLASS-PATH или его значения MAIN-CLASS.

Проблема возникает при заархивировании папки назад.

Действительный исполняемый / исполняемый JAR имеет следующую структуру:

myJAR (Main-Directory)
    |-META-INF (Mandatory)
             |-MANIFEST.MF (Mandatory Main-class: com.MainClass)
    |-com 
         |-MainClass.class (must to implement the main method, mandatory)
    |-properties files (optional)
    |-etc (optional)

Если ваш JAR соответствует этим правилам, это будет работать, не имеет значения, если вы создадите его вручную с помощью инструмента ZIP, а затем измените расширение на .jar

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

java -jar myJAR.jar 

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

**myJAR (Main-Directory)
    |-myJAR (creates another directory making the file corrupted)**
          |-META-INF (Mandatory)
                   |-MANIFEST.MF (Mandatory Main-class: com.MainClass)
          |-com 
              |-MainClass.class (must to implement the main method, mandatory)
          |-properties files (optional)
          |-etc (optional)

:)

11 голосов
/ 02 декабря 2014

Возможно, проблема в том, что в вашем JAR-файле содержится более 65536 файлов: Почему java жалуется на файлы JAR с большим количеством записей? Исправление описано в ответе этого вопроса этого вопроса.

9 голосов
/ 26 октября 2014

Может быть из-за проблемы с MANIFEST.MF. Попробуйте запустить основной класс с помощью следующей команды, если вы знаете пакет, в котором расположен основной класс.

java -cp launcher/target/usergrid-launcher-1.0-SNAPSHOT.jar co.pseudononymous.Server
3 голосов
/ 26 сентября 2011

Это общая проблема с "манифестом" в ошибке? Да, это часто случается, вот ссылка: http://dev -answers.blogspot.com / 2006/07 / invalid-or-поврежден-jarfile.html

Решение:

Использование задачи ant для создания файла манифеста на лету дает вам следующую запись:

Manifest-Version: 1.0
Ant-Version: Apache Ant 1.6.2
Created-By: 1.4.2_07-b05 (Sun Microsystems Inc.)
Main-Class: com.example.MyMainClass

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

Manifest-Version: 1.0
Main-Class: com.example.MyMainClass

При более тщательном изучении я уверен, что я мог бы создать динамическое создание метафайла, работая с Ant, как, как я знаю, делают другие люди - должна быть некоторая особенность в сочетании моей версии ant (1.6.2), версии java (1.4.2_07) и, возможно, текущая фаза луны.

Примечания:

Анализ файла Meta-inf был проблемой, которая возникла, была исправлена, а затем снова появилась для солнца. См .: Идентификатор ошибки: 4991229 . Если вы можете решить, существует ли эта ошибка в вашей (или моей) версии Java SE, у вас больше терпения, чем у меня.

0 голосов
/ 05 июня 2019

Может быть, это была просто случайность, но однажды у меня возникла эта ошибка, мне просто пришлось убить все процессы javaw.exe, которые выполнялись в фоновом режиме.После этого сработал исполняемый файл JAR.

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

Если в конце файла jar есть дополнительные байты, его могут открыть такие исследователи, как 7-Zip, но он будет считаться поврежденным. Я использую систему онлайн-загрузки, которая автоматически добавляет один дополнительный символ LF ('\ n', 0x0a) в конец каждого файла JAR. С такими файлами существует множество решений для запуска файла:

  • Используйте подход rayagubd и укажите .jar в качестве пути к классу и имени основного класса в командной строке
  • Удалите лишний байт в конце файла (с помощью hex-редактора или команды, подобной head -c -1 myjar.jar), а затем выполните jar, дважды щелкнув мышью или с помощью java -jar myfile.jar как обычно.
  • Измените расширение с .jar на .zip, извлеките файлы и заново создайте файл .zip, убедившись, что папка META-INF находится на верхнем уровне.
  • Изменение расширения .jar на .zip, удаление ненужного файла из .jar и изменение расширения обратно на .jar

Все эти решения требуют, чтобы структура .zip и файла META-INF была по существу правильной. Они были проверены только с одним дополнительным байтом в конце почтового индекса, «портящего» его.

Я попал в настоящий беспорядок, дважды применив head -c -1 *.jar > tmp.jar. head вставил текст ASCII ==> myjar.jar <== в начале файла, полностью повредив его.

0 голосов
/ 29 марта 2017

Попробуйте использовать команду jar -xvf fileName.jar и затем экспортируйте содержимое распакованного файла в новый проект Java в Eclipse.

0 голосов
/ 13 марта 2017

Это может быть также опечатка в MANIFEST.MF, например.Дата сборки с двумя :

  Build-Date:: 2017-03-13 16:07:12
0 голосов
/ 03 марта 2016

Кроме того, убедитесь, что версия Java, используемая во время выполнения, является эквивалентной или более поздней версией, чем версия Java, использованная во время компиляции

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