¿Qué contiene exactamente un archivo jar?

88

Como becario, utilizo el código de la empresa en mis proyectos y generalmente me envían un jararchivo para trabajar. Lo añado a la acumulación pathen Eclipsey por lo general todo está bien y dandy.

Sin embargo, sentí curiosidad por saber qué contenía cada clase y cuando trato de abrir una de las clases en el jararchivo, me dice que necesito un archivo fuente.

¿Qué significa esto? Vengo de un fondo C / C ++ , ¿es jarsimilar a un .oarchivo ya compilado y todo lo que puedo ver son las .hcosas? ¿O hay un código real en el jararchivo que estoy usando que está encriptado y no puedo leerlo?

¡Gracias por todas las respuestas!

Editar:
Gracias, chicos, sabía que era una especie de archivo, pero no sabía por qué cuando traté de abrir los .classarchivos, obtuve un montón de caracteres aleatorios. El resultado fue similar cuando intenté abrir un .oarchivo en C, así que solo quería asegurarme.
¡Gracias!

Joshualan
fuente
5
@Blue Moon: Lo curioso es que Google me lleva aquí. : p
user1036719
@ user1036719 Si bien es bueno que haya encontrado la respuesta aquí, todavía hay otro enlace que viene antes de este. Y esta no es realmente una cuestión de programación que deba fomentarse en SO. Sin embargo, no voté a la baja ni a cerrar.
PP

Respuestas:

88

Un archivo JAR es en realidad solo un archivo ZIP. Puede contener cualquier cosa; normalmente contiene código Java compilado (* .class), pero a veces también código fuente Java (* .java).

Sin embargo, Java se puede descompilar; en caso de que el desarrollador ofusque su código, no obtendrá ningún nombre útil de clase / función / variable.

ThiefMaster
fuente
53

Sin embargo, sentí curiosidad por lo que contenía cada clase y cuando trato de abrir una de las clases en el archivo jar, me dice que necesito un archivo fuente.

Un archivo jar es básicamente un archivo zip que contiene archivos .class y potencialmente otros recursos (y metadatos sobre el jar en sí). En realidad, es difícil comparar C con Java, ya que el código de bytes de Java mantiene muchos más metadatos que la mayoría de los formatos binarios, pero el archivo de clase es código compilado en lugar de código fuente.

Si abre el archivo jar con una utilidad zip o lo ejecuta jar xf foo.jar, puede extraer los archivos y echarles un vistazo. Tenga en cuenta que no necesita un archivo jar para ejecutar código Java; los cargadores de clases pueden cargar datos de clase directamente desde el sistema de archivos, o desde URL, así como desde archivos jar.

Jon Skeet
fuente
Gracias, sabía que era una especie de archivo ya que podía descomprimirlo, pero estaba confundido por qué ninguno de los archivos .class contenía texto legible. Gracias por explicarme, supongo que una clase es como un archivo .o.
Joshualan
19

La mejor manera de comprender qué contiene el archivo jar es ejecutando esto:

Vaya a la línea de comando y ejecute jar tvf jarfilename.jar

Ajay George
fuente
13

Un jararchivo es un archivo zip con algunos archivos adicionales que contienen metadatos. (A pesar de la extensión .jar, está en formato zip, y cualquier utilidad que se ocupe de archivos .zip también puede hacerlo).

http://docs.oracle.com/javase/8/docs/technotes/guides/jar/index.html

Los archivos jar pueden contener cualquier tipo de archivo, pero generalmente contienen archivos de clase y archivos de configuración de soporte (propiedades), gráficos y otros archivos de datos que necesita la aplicación.

Los archivos de clase contienen código Java compilado, que la máquina virtual Java puede ejecutar.

http://en.wikipedia.org/wiki/Java_class_file

theglauber
fuente
1
más 1 porque
enlazas
10

JAR son las siglas de Java ARchive. Es un formato de archivo basado en el popular formato de archivo ZIP y se utiliza para agregar muchos archivos en uno. Aunque JAR se puede utilizar como una herramienta de archivo general, la principal motivación para su desarrollo fue que los applets de Java y sus componentes necesarios (archivos .class, imágenes y sonidos) se puedan descargar a un navegador en una sola transacción HTTP, en lugar de abrir una nueva conexión para cada pieza. Esto mejora en gran medida la velocidad con la que se puede cargar un subprograma en una página web y comenzar a funcionar. El formato JAR también admite la compresión, lo que reduce el tamaño del archivo y mejora aún más el tiempo de descarga. Además, las entradas individuales en un archivo JAR pueden estar firmadas digitalmente por el autor del subprograma para autenticar su origen.

oxy_js
fuente
5

El archivo Jar contiene clases binarias Java compiladas en la forma de las *.classcuales se pueden convertir a .javaclases legibles descompilando usando algún descompilador de código abierto. El jar también tiene un opcional META-INF/MANIFEST.MFque nos dice cómo usar el archivo jar: especifica otros archivos jar para cargar con el jar.

Piyush Mattoo
fuente
3

Jar (Java Archive) contiene un grupo de archivos .class.

1.Para crear un archivo Jar (archivo zip)

 if one .class (say, Demo.class) then use command jar -cvf NameOfJarFile.jar Demo.class (usually it’s not feasible for only one .class file)

 if more than one .class (say, Demo.class , DemoOne.class) then use command jar -cvf NameOfJarFile.jar Demo.class DemoOne.class

 if all .class is to be group (say, Demo.class , DemoOne.class etc) then use command jar -cvf NameOfJarFile.jar *.class

2.Para extraer el archivo Jar (descomprimir el archivo)

    jar -xvf NameOfJarFile.jar

3.Para mostrar la tabla de contenido

    jar -tvf NameOfJarFile.jar
bishwas pokharel
fuente
2

Un archivo .jar es similar a un archivo .exe. En esencia, ambos son archivos zip ejecutables (diferentes algoritmos zip).

En un archivo jar, verá carpetas y archivos de clases. Cada archivo de clase es similar a su archivo .o, y es un archivo java compilado.

Si desea ver el código en un archivo jar, descargue un descompilador de Java (ubicado aquí: http://java.decompiler.free.fr/?q=jdgui ) y un extractor .jar (7zip funciona bien).

Tyzoid
fuente
1

JD-GUI es una herramienta muy útil para navegar y descompilar archivos JAR

Anton Arhipov
fuente
1
Esto no responde a la pregunta.
Craig Fisher
1

Un archivo .jar contiene código compilado (archivos * .class) y otros datos / recursos relacionados con ese código. Le permite agrupar varios archivos en un solo archivo de almacenamiento. También contiene metadatos. Dado que es un archivo zip, es capaz de comprimir los datos que ingresa.

Un par de cosas que encontré útiles.

http://www.skylit.com/javamethods/faqs/createjar.html

http://docs.oracle.com/javase/tutorial/deployment/jar/basicsindex.html

El libro OSGi en la práctica define los archivos JAR como, "Los JAR son archivos de almacenamiento basados ​​en el formato de archivo ZIP, lo que permite agregar muchos archivos en un solo archivo. Normalmente, los archivos contenidos en el archivo son una mezcla de archivos de clase Java compilados y recursos archivos como imágenes y documentos. Además, la especificación define una ubicación estándar dentro de un archivo JAR para metadatos, la carpeta META-INF, y varios nombres y formatos de archivo estándar directamente, el más importante de los cuales es el archivo MANIFEST.MF ".

Wazza
fuente
1

Solo verifique si el aopalliance.jararchivo tiene .javaarchivos en lugar de .classarchivos. Si es así, simplemente extraiga el archivo jar, impórtelo en eclipse y cree un jar aunque eclipse. Funcionó para mí.

Ghanshyam
fuente
1

Mientras aprendía sobre JAR, me encontré con este hilo, pero no pude obtener suficiente información para personas como yo, que tienen experiencia en .NET, así que agregaré algunos puntos que pueden ayudar a personas como yo con experiencia en .NET.

Primero necesitamos definir un concepto similar al JAR en .NET, que es Ensamblaje y el ensamblaje comparte mucho en común con los archivos JAR de Java.

Entonces, un ensamblado es la unidad fundamental de empaquetado de código en el entorno .NET. Los ensamblados son autónomos y normalmente contienen el código intermedio de las clases de compilación, metadatos sobre las clases y cualquier otro archivo que necesite el código empaquetado para realizar su tarea. Dado que los ensamblados son la unidad fundamental del empaquetado de código, varias acciones relacionadas con la interacción con tipos deben realizarse a nivel de ensamblado. Por ejemplo , la concesión de permisos de seguridad, la implementación de código y el control de versiones se realizan a nivel de ensamblado.

Los archivos JAR de Java realizan una tarea similar en Java con la mayoría de las diferencias en la implementación. Los ensamblados generalmente se almacenan como EXE o DLL, mientras que los archivos JAR se almacenan en formato ZIP .

Fuente de información -> 5- Asambleas

Muhammad Waqas Dilawar
fuente