Archivo jar corrupto


He creado un archivo jar en Windows 7 usando eclipse. Cuando estoy tratando de abrir el archivo jar, dice archivo jar inválido o corrupto. ¿Alguien puede sugerirme por qué el archivo jar no es válido?

Author: johnnyRose, 2011-09-26

9 answers

Esto sucederá cuando haga doble clic en un archivo JAR en el explorador de Windows, pero el JAR no es en sí mismo un ejecutable JAR. Un JAR ejecutable real debe tener al menos una clase con un método main() y tenerlo referenciado en MANIFEST.MF.

En Eclispe, necesita exportar el proyecto como Archivo JAR ejecutable en lugar de como archivo JAR para obtener un JAR ejecutable real.

O, si su JAR es únicamente un contenedor de un grupo de clases estrechamente relacionadas (una biblioteca), entonces no debe hacer doble clic en él, sino abrirlo usando alguna herramienta ZIP. El explorador de Windows es decir, por defecto asocia los archivos JAR con java.exe, lo que no funcionará para ese tipo de JARs libarios.

 36
Author: BalusC,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2014-12-02 12:37:52

Esto ocurre regularmente cuando cambia la extensión en el JAR para ZIP, extrae el contenido zip y realiza algunas modificaciones en los archivos, como cambiar el MANIFIESTO.Archivo MF que es un caso muy común, muchas veces Eclipse no genera el archivo de MANIFIESTO como queremos, o tal vez nos gustaría modificar la RUTA de CLASE o los valores de la CLASE PRINCIPAL de la misma.

El problema ocurre cuando comprime la carpeta.

Un JAR ejecutable/Ejecutable válido tiene el siguiente estructura:

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)

Si JAR cumple con estas reglas funcionará no importa si lo biuld manualmente usando una herramienta ZIP y luego cambió la extensión de nuevo a .jar

Una vez que haya terminado, intente ejecutarlo en la línea de comandos usando:

java -jar myJAR.jar 

Cuando se usa una herramienta zip para descomprimir, cambiar archivos y volver a comprimir, normalmente la estructura JAR cambia a esta estructura, lo que es incorrecto, ya que se agrega otro nivel de directorio en la parte superior del sistema de archivos archivo dañado como se muestra a continuación:

**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)

:)

 17
Author: Israelm,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2014-07-10 22:56:20

Podría ser debido a un problema con MANIFEST.MF. Intente iniciar la clase principal con el siguiente comando si conoce el paquete donde se encuentra la clase principal.

java -cp launcher/target/usergrid-launcher-1.0-SNAPSHOT.jar co.pseudononymous.Server
 9
Author: prayagupd,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2014-10-26 11:12:51

El problema podría ser que hay más de 65536 archivos en su JAR: ¿Por qué java se queja de archivos jar con muchas entradas? La solución se describe en la respuesta de esta pregunta.

 9
Author: thSoft,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-05-23 12:02:42

¿Este es el problema común con "manifiesto" en el error? Sí, sucede mucho, aquí hay un enlace: http://dev-answers.blogspot.com/2006/07/invalid-or-corrupt-jarfile.html

Solución:

El uso de la tarea ant para crear el archivo de manifiesto sobre la marcha le da una entrada como:

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

Crear el archivo de manifiesto yo mismo, con lo esencial, soluciona el problema:

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

Con más investigación Estoy seguro de que podría haber conseguido el creación dinámica de meta-archivos trabajando con Ant como sé que otras personas hacen-debe haber alguna peculiaridad en la combinación de mi versión ant (1.6.2), versión java (1.4.2_07) y tal vez la fase actual de la luna.

Notas:

El análisis del archivo Meta-inf ha sido un problema que ha surgido, se ha solucionado y luego aparece de nuevo para sun. Ver: Bug Id: 4991229. Si puede averiguar si este error existe en la versión suya (o mía) del Java SE que tiene más paciencia que yo.

 3
Author: Coffee,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-08-31 20:14:07

Además, asegúrese de que la versión de java utilizada en tiempo de ejecución es una versión equivalente o posterior a la de java utilizada durante la compilación

 0
Author: Mr. Whoa,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-03-03 19:03:51

Puede ser un error tipográfico en el MANIFEST.MF también, p. ej. Fecha de construcción con dos :

  Build-Date:: 2017-03-13 16:07:12
 0
Author: Olivier Faucheux,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-03-13 15:15:31

Intente usar el comando jar-xvf fileName.jar y luego exportar el contenido del archivo descomprimido en un nuevo proyecto Java en Eclipse.

 0
Author: mcginn,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-03-29 12:20:55

Si el archivo jar tiene algún byte extra al final, exploradores como 7-Zip pueden abrirlo, pero será tratado como corrupto. Utilizo un sistema de carga en línea que agrega automáticamente un solo carácter adicional LF ('\n', 0x0a) al final de cada archivo jar. Con estos archivos, hay una variedad de soluciones para ejecutar el archivo:

  • Use el enfoque de prayagubd y especifique el .jar como classpath y nombre de la clase principal en el símbolo del sistema
  • Elimine el byte adicional al final del archivo (con un editor hexadecimal o un comando como head -c -1 myjar.jar), y luego ejecuta el jar haciendo doble clic o con java -jar myfile.jar como es normal.
  • Cambie la extensión desde .tarro para .zip, extraer los archivos, y volver a crear el .archivo zip, asegurándose de que la carpeta META-INF está en el nivel superior.
  • Cambiando el .extensión de tarro a .zip, la eliminación de un archivo desatendido desde dentro de la .tarro, y cambiar la extensión de nuevo a .jar

Todas estas soluciones requieren que la estructura de la .zip y el archivo META-INF es esencialmente correcto. Solo se han probado con un solo byte extra al final del zip "corrompiéndolo".

Me metí en un verdadero lío al aplicar head -c -1 *.jar > tmp.jar dos veces. head insertó el texto ASCII ==> myjar.jar <== al inicio del archivo, corrompiéndolo completamente.

 0
Author: Josiah Yoder,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-05-24 14:44:25