Che cos'è il formato di file JAR?
I file con l'estensione .jar sono archivi ZIP utilizzati dalla piattaforma Java per raggruppare file .class compilati, metadati e risorse - come immagini, file di testo e dati di configurazione - in un unico pacchetto portatile. Il formato è stato introdotto con JDK 1.1 e rimane l'unità di distribuzione principale per le librerie e le applicazioni Java.
Un file .jar può fungere da eseguibile autonomo quando il suo file META-INF/MANIFEST.MF specifica una voce Main-Class. Quando viene lanciato con java -jar file.jar, la JVM legge questo attributo e avvia la classe designata, consentendo agli sviluppatori di distribuire un'applicazione completa come un singolo file che viene eseguito su qualsiasi sistema con un runtime compatibile installato. Ogni singola voce all'interno dell'archivio può anche essere compressa indipendentemente utilizzando l'algoritmo DEFLATE, che riduce le dimensioni del pacchetto consentendo al contempo un rapido accesso casuale ai singoli file.
Tra i metadati trasportati da un .jar, il file META-INF/MANIFEST.MF è il più importante: definisce come viene utilizzato il pacchetto, elenca le dipendenze del classpath tramite Class-Path e può contenere attributi di sicurezza. Le firme digitali sono memorizzate come file .SF e .DSA/.RSA separati all'interno di META-INF/, non nel manifesto stesso. Java 9 ha introdotto due ulteriori funzionalità: i JAR Multi-Release inseriscono override di classi specifici per la versione sotto META-INF/versions/N/, e i JAR modulari includono un module-info.class alla radice dell'archivio.
Per sfogliare o estrarre il contenuto di un file .jar, è possibile utilizzare qualsiasi strumento di decompressione ZIP standard ed eseguire le stesse azioni di un normale archivio - rinominarlo in .zip funziona altrettanto bene. È inoltre possibile utilizzare il comando jar incluso nel JDK:
- Elenca contenuti:
jar -tf file.jar - Estrai:
jar -xf file.jar - Esegui (se eseguibile):
java -jar file.jar
I formati di archivio lato server correlati includono i file .war per le applicazioni web e i file .ear per le applicazioni enterprise, entrambi basati sulla stessa struttura ZIP.
Sicurezza e incolumità
RISCHIO: MEDIUMUn JAR eseguibile è un vero programma: con Java installato, «java -jar» esegue qualsiasi codice contenga, con i permessi del tuo utente - quindi un JAR sconosciuto può trasportare malware (i Java RAT e i trojan sono una famiglia nota). Tratta un JAR scaricato come qualsiasi .exe: esegui solo quelli provenienti da una fonte di cui ti fidi e diffida degli allegati .jar non richiesti. La semplice ispezione come ZIP (7-Zip) è sicura; l'esecuzione è il rischio. Un JAR può essere firmato digitalmente, ma una firma prova solo l'origine, non la sicurezza.
Dettagli del formato
in sintesiProgrammi che aprono file JAR
Dettagli tecnici
specifiche approfondite| Formato contenitore | Archivio ZIP - condivide i magic bytes `PK` (`50 4B 03 04`) all'offset 0 con tutti i file ZIP standard |
| Tipo MIME | `application/java-archive` |
| File interno richiesto | `META-INF/MANIFEST.MF` - deve essere presente; controlla i metadati, il classpath e il comportamento dell'eseguibile |
| Trigger JAR eseguibile | Attributo `Main-Class` in `MANIFEST.MF`; lanciato con `java -jar file.jar` |
| Formato bytecode payload | File `.class` compilati contenenti bytecode JVM - indipendente dalla piattaforma, non codice macchina nativo |
| Compressione per voce | Algoritmo DEFLATE (lo stesso di ZIP); le singole voci possono anche essere memorizzate non compresse per un accesso casuale più rapido |
| Firme digitali | File di firma `.SF` accoppiato con un file di chiave `.DSA` o `.RSA`, entrambi memorizzati all'interno di `META-INF/` |
| Dichiarazione classpath | L'attributo del manifesto `Class-Path` elenca i JAR dipendenti separati da spazi per la risoluzione a runtime |
| JAR Multi-Release (MR-JAR) | Java 9+; override di classi specifici per la versione posizionati sotto `META-INF/versions/N/` in modo che le JVM più recenti scelgano il bytecode corretto |
| Descrittore di modulo (JPMS) | Un JAR modulare include `module-info.class` alla radice dell'archivio, abilitando il sistema di moduli di Java 9+ |
| Sigillatura del pacchetto | `Sealed: true` nel manifesto impedisce ad altri JAR di iniettare classi nello stesso pacchetto a runtime |
| Uber/Fat JAR | Variante di distribuzione autonoma che incorpora tutti i JAR di dipendenza; richiede un caricatore di classi personalizzato come Spring Boot Loader |
| Rilasciato | 1996-1997 (JDK 1.1) |
| Standard aperto | Sì · royalty-free |
| Specifica | docs.oracle.com |
Conversioni JAR
Domande e risposte della community
chiesto dagli utentiAncora nessuna domanda - sii il primo a chiedere informazioni sui file JAR.