Cosa contiene esattamente un file jar?


88

Come stagista, utilizzo il codice dell'azienda nei miei progetti e di solito mi inviano un jarfile con cui lavorare. Lo aggiungo al build pathin Eclipsee di solito va tutto bene e dandy.

Tuttavia, mi sono incuriosito di sapere cosa conteneva ogni classe e quando provo ad aprire una delle classi nel jarfile, mi dice che ho bisogno di un file sorgente.

Cosa significa questo? Vengo da uno sfondo C / C ++ quindi è jarsimile a un .ofile già compilato e tutto quello che posso vedere è la .hroba? O c'è un codice effettivo nel jarfile che sto usando che è crittografato in modo da non poterlo leggere?

Grazie per tutte le risposte!

Modifica:
Grazie, ragazzi, sapevo che era una specie di archivio, ma ero confuso sul perché quando ho provato ad aprire i .classfile, ho ottenuto un sacco di personaggi casuali. L'output era simile quando ho provato ad aprire un .ofile in C, quindi volevo solo essere sicuro.
Grazie!




5
@ Blue Moon: La cosa divertente è che Google mi porta qui. : p
user1036719

@ user1036719 Sebbene sia positivo che tu abbia trovato la risposta qui, c'è ancora un altro collegamento che precede questo. E questa non è davvero una domanda di programmazione che deve essere incoraggiata su SO. Tuttavia non ho votato negativamente o chiuso il voto.
PP

Risposte:


88

Un file JAR è in realtà solo un file ZIP. Può contenere qualsiasi cosa: di solito contiene codice Java compilato (* .class), ma a volte anche codice sorgente Java (* .java).

Tuttavia, Java può essere decompilato: nel caso in cui lo sviluppatore abbia offuscato il suo codice, non otterrai alcun nome utile di classe / funzione / variabile.


53

Tuttavia, mi sono incuriosito da cosa contenesse ciascuna classe e quando provo ad aprire una delle classi nel file jar, mi dice che ho bisogno di un file sorgente.

Un file jar è fondamentalmente un file zip contenente file .class e potenzialmente altre risorse (e metadati sul jar stesso). È davvero difficile confrontare C con Java, poiché il codice byte Java conserva molti più metadati rispetto alla maggior parte dei formati binari, ma il file di classe è codice compilato anziché codice sorgente.

Se apri il file jar con un'utilità zip o lo esegui jar xf foo.jar, puoi estrarre i file da esso e guardarli. Tieni presente che non è necessario un file jar per eseguire codice Java: i classloader possono caricare i dati della classe direttamente dal file system o dagli URL, nonché dai file jar.


Grazie, sapevo che era una specie di archivio dato che potevo decomprimerlo, ma ero confuso sul motivo per cui nessuno dei file .class contenesse testo leggibile. Grazie per la spiegazione, immagino che un .class sia una specie di file .o.
joshualan

19

Il modo migliore per capire cosa contiene il file jar è eseguendo questo:

Vai alla riga di comando ed esegui jar tvf jarfilename.jar


13

Un jarfile è un file zip con alcuni file aggiuntivi contenenti metadati. (Nonostante l'estensione .jar, è in formato zip e tutte le utilità che gestiscono i file .zip sono anche in grado di gestire i file .jar.)

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

I file Jar possono contenere qualsiasi tipo di file, ma di solito contengono file di classe e file di configurazione di supporto (proprietà), grafici e altri file di dati necessari per l'applicazione.

I file di classe contengono codice Java compilato, eseguibile dalla Java Virtual Machine.

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


1
più 1 perché ti colleghi allo standard
Ciro Santilli 郝海东 冠状 病 六四 事件 法轮功

10

JAR sta per Java ARchive. È un formato di file basato sul popolare formato di file ZIP e viene utilizzato per aggregare molti file in uno solo. Sebbene JAR possa essere utilizzato come strumento di archiviazione generale, la motivazione principale per il suo sviluppo era che le applet Java e i loro componenti necessari (file .class, immagini e suoni) potessero essere scaricati su un browser in una singola transazione HTTP, piuttosto che aprire una nuova connessione per ogni pezzo. Ciò migliora notevolmente la velocità con cui un'applet può essere caricata su una pagina Web e iniziare a funzionare. Il formato JAR supporta anche la compressione, che riduce le dimensioni del file e migliora ulteriormente il tempo di download. Inoltre, le singole voci in un file JAR possono essere firmate digitalmente dall'autore dell'applet per autenticare la loro origine.


5

Il file Jar contiene classi binarie Java compilate nella forma delle *.classquali possono essere convertite in .javaclassi leggibili decompilandole utilizzando un decompilatore open source. Il jar ha anche un optional META-INF/MANIFEST.MFche ci dice come usare il file jar - specifica altri file jar da caricare con il jar.


3

Jar (Java Archive) contiene un gruppo di file .class.

1.Per creare file Jar (file 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.Per estrarre il file Jar (Unzip File)

    jar -xvf NameOfJarFile.jar

3.Per visualizzare la tabella dei contenuti

    jar -tvf NameOfJarFile.jar

2

Un file .jar è simile a un file .exe. In sostanza, sono entrambi file zip eseguibili (diversi algoritmi zip).

In un file jar, vedrai cartelle e file di classe. Ogni file di classe è simile al tuo file .o ed è un archivio java compilato.

Se vuoi vedere il codice in un file jar, scarica un decompilatore java (che si trova qui: http://java.decompiler.free.fr/?q=jdgui ) e un estrattore .jar (7zip funziona bene).



1

Un file .jar contiene codice compilato (file * .class) e altri dati / risorse relativi a quel codice. Ti consente di raggruppare più file in un unico file di archivio. Contiene anche metadati. Poiché si tratta di un file zip, è in grado di comprimere i dati che ci inserisci.

Un paio di cose che ho trovato utili.

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

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

Il libro OSGi in pratica definisce i file JAR come "I JAR sono file di archivio basati sul formato di file ZIP, che consentono di aggregare molti file in un unico file. In genere i file contenuti nell'archivio sono un misto di file di classe Java compilati e risorse file come immagini e documenti. Inoltre, la specifica definisce una posizione standard all'interno di un archivio JAR per i metadati - la cartella META-INF - e diversi nomi di file standard e formati direttamente all'interno di essa, il più importante dei quali è il file MANIFEST.MF. "


1

Controlla solo se il aopalliance.jarfile contiene .javafile anziché .classfile. in tal caso, estrai semplicemente il file jar, importalo in eclipse e crea un jar anche se eclipse. Ha funzionato per me.


1

Durante l'apprendimento di JAR, mi sono imbattuto in questo thread, ma non sono riuscito a ottenere informazioni sufficienti per persone come me, che hanno un background .NET, quindi aggiungerò alcuni punti che possono aiutare persone come me con background .NET.

Per prima cosa dobbiamo definire un concetto simile a JAR in .NET che è Assembly e assembly condivide molto in comune con i file JAR Java.

Quindi, un assembly è l'unità fondamentale della creazione di pacchetti di codice nell'ambiente .NET. Gli assembly sono autonomi e in genere contengono il codice intermedio della compilazione delle classi, i metadati sulle classi e qualsiasi altro file necessario al codice del pacchetto per eseguire il suo compito. Poiché gli assembly sono l'unità fondamentale della creazione di pacchetti di codice, diverse azioni relative all'interazione con i tipi devono essere eseguite a livello di assembly. Ad esempio , la concessione delle autorizzazioni di sicurezza, la distribuzione del codice e il controllo delle versioni vengono eseguiti a livello di assembly.

I file JAR Java eseguono un'attività simile in Java con la maggior parte delle differenze nell'implementazione. Gli assembly vengono solitamente archiviati come EXE o DLL mentre i file JAR sono archiviati nel formato di file ZIP .

Fonte di informazione -> 5- Assemblee

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.