Fisierele .jar (Java Archive) sunt fisiere arhivate care contin aplicatii Java. Pot contine atat fisiere compilate (.class), cat si fisiere sursa (.java). Printre altele, permit distributia si executia mult mai usoara a aplicatiilor Java.
Crearea unui fisier .jar se realizeaza cu ajutorul utilitarului cu acelasi nume din mediul de dezvoltare Java. Comanda care permite crearea unei arhive Java ne-executabile este urmatoarea:
jar cfv fisier_arhiva.jar lista_fisiere
De exemplu, daca consideram clasele necesare la nivelul aplicatiei ObiecteGrafice (ObiectGrafic, Cerc, Dreptunghi si Patrat), clase organizate in pachetul ro.virtualcampus.obiectgrafic, atunci crearea unei arhive care sa corespunda pachetului de clase se face astfel:
jar cfv obiectegrafice.jar ./ro/virtualcampus/obiectgrafic/*.class
added manifest adding: ro/virtualcampus/obiectgrafic/Cerc.class(in = 1219) (out= 652)(deflated 46%) adding: ro/virtualcampus/obiectgrafic/Dreptunghi.class(in = 1398) (out= 712)(deflated 49%) adding: ro/virtualcampus/obiectgrafic/ObiectGrafic.class(in = 1169) (out= 612)(deflated 47%) adding: ro/virtualcampus/obiectgrafic/Patrat.class(in = 972) (out= 547)(deflated 43%)
Se poate observa ca au fost incluse in arhiva toate fisierele .class din pachet, impreuna cu structura pachetului.
Listarea fisierelor de la nivelul arhivei obiectegrafice.jar se face prin intermediul comenzii:
jar tfv obiectegrafice.jar
0 Wed Oct 23 12:24:38 EEST 2019 META-INF/ 62 Wed Oct 23 12:24:38 EEST 2019 META-INF/MANIFEST.MF 1219 Tue Oct 22 15:18:14 EEST 2019 ro/virtualcampus/obiectgrafic/Cerc.class 1398 Tue Oct 22 15:18:14 EEST 2019 ro/virtualcampus/obiectgrafic/Dreptunghi.class 1169 Tue Oct 22 15:18:14 EEST 2019 ro/virtualcampus/obiectgrafic/ObiectGrafic.class 972 Tue Oct 22 15:18:14 EEST 2019 ro/virtualcampus/obiectgrafic/Patrat.class
Pentru a (re)compila clasa principala a aplicatiei ObiecteGrafice trebuie sa avem in vedere faptul ca aceasta include clase din pachetul obiectegrafice.
javac -classpath .;obiectegrafice.jar ./ro/virtualcampus/app/ObiecteGrafice.java
Rularea aplicatiei prin intermediul utilitarului java necesita clauza introdusa mai sus (-classpath):
java -classpath .;obiectegrafice.jar ro.virtualcampus.app.ObiecteGrafice
Cerc [raza=1.5, x=2.3, y=3.4] Dreptunghi [lungime=3.4, latime=4.8, x=5.2, y=1.8] Patrat [lungime=4.6, latime=4.6, x=1.3, y=2.6] Aria cerc: 7.07 Perimetru cerc: 9.42 Aria dreptunghi: 16.32 Perimetru dreptunghi: 16.40 Aria patrat: 21.16 Perimetru patrat: 18.40
Crearea unui fisier .jar executabil necesita, in plus, specificarea unui fisier manifest (META-INF/MANIFEST.MF), care sa indice numele clasei principale pentru aplicatia Java.
Manifest-Version: 1.0 Created-By: 13 (Oracle Corporation) Main-Class: ro.virtualcampus.app.ObiecteGrafice
In acest caz comanda corespunzatoare utilitarului jar specifica urmatorii parametri:
jar cfvm fisier_arhiva.jar fisier_manifest lista_fisiere
jar cfvm obiectegrafice.jar ./META-INF/MANIFEST.MF ./ro/virtualcampus/obiectgrafic/*.class ./ro/virtualcampus/app/ObiecteGrafice.class
added manifest adding: ro/virtualcampus/obiectgrafic/Cerc.class(in = 1219) (out= 652)(deflated 46%) adding: ro/virtualcampus/obiectgrafic/Dreptunghi.class(in = 1398) (out= 712)(deflated 49%) adding: ro/virtualcampus/obiectgrafic/ObiectGrafic.class(in = 1169) (out= 612)(deflated 47%) adding: ro/virtualcampus/obiectgrafic/Patrat.class(in = 972) (out= 547)(deflated 43%) adding: ro/virtualcampus/app/ObiecteGrafice.class(in = 1328) (out= 716)(deflated 46%)
Dupa creare, fisierul .jar executabil poate fi rulat prin intermediul masinii virtuale, astfel:
java -jar obiectegrafice.jar
Cerc [raza=1.5, x=2.3, y=3.4] Dreptunghi [lungime=3.4, latime=4.8, x=5.2, y=1.8] Patrat [lungime=4.6, latime=4.6, x=1.3, y=2.6] Aria cerc: 7.07 Perimetru cerc: 9.42 Aria dreptunghi: 16.32 Perimetru dreptunghi: 16.40 Aria patrat: 21.16 Perimetru patrat: 18.40
Crearea unui fisier .jar executabil poate fi realizata si prin precizarea numelui clasei principale pentru aplicatia Java in locul referirii unui fisier manifest, daca clasa principala este singura informatie care se doreste a fi transmisa prin intermeniul acestui fisier.
In acest caz comanda corespunzatoare utilitarului jar necesita utilizarea parametrului e in locul parametrului m.
jar cfve obiectegrafice.jar ro.virtualcampus.app.ObiecteGrafice ./ro/virtualcampus/obiectgrafic/*.class ./ro/virtualcampus/app/ObiecteGrafice.class
added manifest adding: ro/virtualcampus/obiectgrafic/Cerc.class(in = 1219) (out= 652)(deflated 46%) adding: ro/virtualcampus/obiectgrafic/Dreptunghi.class(in = 1398) (out= 712)(deflated 49%) adding: ro/virtualcampus/obiectgrafic/ObiectGrafic.class(in = 1169) (out= 612)(deflated 47%) adding: ro/virtualcampus/obiectgrafic/Patrat.class(in = 972) (out= 547)(deflated 43%) adding: ro/virtualcampus/app/ObiecteGrafice.class(in = 1328) (out= 716)(deflated 46%)
Extragerea continutului unei arhive .jar presupune precizarea urmatorilor parametri in comanda jar:
jar xvf obiectegrafice.jar
created: META-INF/ inflated: META-INF/MANIFEST.MF inflated: ro/virtualcampus/obiectgrafic/Cerc.class inflated: ro/virtualcampus/obiectgrafic/Dreptunghi.class inflated: ro/virtualcampus/obiectgrafic/ObiectGrafic.class inflated: ro/virtualcampus/obiectgrafic/Patrat.class inflated: ro/virtualcampus/app/ObiecteGrafice.class