Rulați o aplicație Java din linia de comandă

1. Prezentare generală

De obicei, fiecare aplicație semnificativă include unul sau mai multe fișiere JAR ca dependențe. Cu toate acestea, există uneori un fișier JAR în sine reprezintă o aplicație independentă sau o aplicație web.

Ne vom concentra asupra scenariului de aplicare independent în acest articol. În continuare, ne vom referi la aceasta ca o aplicație JAR.

În acest tutorial, vom învăța mai întâi cum să creați o aplicație JAR. Mai târziu, vom învăța cum să rulăm o aplicație JAR cu sau fără argumente din linia de comandă .

2. Creați o aplicație JAR

Un fișier JAR poate conține una sau mai multe clase principale. Fiecare clasă principală este punctul de intrare al unei aplicații . Deci, teoretic, un fișier JAR poate conține mai multe aplicații, dar trebuie să conțină cel puțin o clasă principală pentru a putea rula.

Un fișier JAR poate avea un punct de intrare setat în fișierul său manifest . În acest caz, fișierul JAR este un JAR executabil. Clasa principală trebuie inclusă în acel fișier JAR.

În primul rând, să vedem un exemplu rapid despre cum să compilăm clasele noastre și să creăm un JAR executabil cu un fișier manifest:

$ javac com/baeldung/jarArguments/*.java $ jar cfm JarExample.jar ../resources/example_manifest.txt com/baeldung/jarArguments/*.class

Un JAR neexecutabil este pur și simplu un fișier JAR care nu are o clasă principală definită în fișierul manifest. După cum vom vedea mai târziu, putem rula în continuare o clasă principală conținută chiar în fișierul JAR.

Iată cum am crea un JAR neexecutabil fără un fișier manifest:

$ jar cf JarExample2.jar com/baeldung/jarArguments/*.class

3. Argumente pentru linia de comandă Java

La fel ca orice aplicație, o aplicație JAR acceptă orice număr de argumente, inclusiv zero argumente. Totul depinde de necesitatea aplicației.

Aceasta permite utilizatorului să specifice informații de configurare la lansarea aplicației .

Ca rezultat, aplicația poate evita valorile codificate și poate gestiona totuși multe cazuri de utilizare diferite.

Un argument poate conține orice caractere alfanumerice, caractere Unicode și, eventual, unele caractere speciale permise de shell, de exemplu „@”.

Argumentele sunt separate de unul sau mai multe spații . Dacă un argument trebuie să conțină spații, spațiile trebuie să fie închise între ghilimele. Fie ghilimele simple, fie ghilimelele duble funcționează bine.

De obicei, pentru o aplicație Java tipică, atunci când invocă aplicația, utilizatorul introduce argumente din linia de comandă după numele clasei.

Cu toate acestea, nu este întotdeauna cazul aplicațiilor JAR.

După cum am discutat deja, punctul de intrare al unei clase principale Java este metoda principală. Cele Argumentele sunt toate String s și sunt transmise la metoda principală ca un șir de matrice.

Acestea fiind spuse, în interiorul aplicației, putem converti orice element al matricei String la alte tipuri de date, cum ar fi char , int , double , clasele lor de împachetare sau alte tipuri adecvate.

4. Rulați un JAR executabil cu Argumente

Să vedem sintaxa de bază pentru rularea unui fișier JAR executabil cu argumente:

java -jar jar-file-name [args ...]

JAR-ul executabil creat mai devreme este o aplicație simplă care tipărește doar argumentele trecute. O putem rula cu orice număr de argumente. Mai jos este un exemplu cu două argumente:

$ java -jar JarExample.jar "arg 1" [email protected] 

Vom vedea următoarea ieșire în consolă:

Hello Baeldung Reader in JarExample! There are 2 argument(s)! Argument(1):arg 1 Argument(2):[email protected] 

Deci, atunci când invocăm un JAR executabil, nu este nevoie să specificăm numele clasei principale pe linia de comandă . Pur și simplu adăugăm argumentele noastre după numele fișierului JAR. Dacă furnizăm un nume de clasă după numele fișierului JAR executabil, acesta devine pur și simplu primul argument pentru clasa principală reală.

De cele mai multe ori, o aplicație JAR este un JAR executabil. Un JAR executabil poate avea maximum o clasă principală definită în fișierul manifest.

În consecință, alte aplicații din același fișier JAR executabil nu pot fi setate în fișierul manifest, dar le putem rula totuși din linia de comandă la fel cum am face pentru un JAR neexecutabil. Vom vedea exact cum în secțiunea următoare.

5. Rulați un JAR neexecutabil cu Argumente

Pentru a rula o aplicație într-un fișier JAR neexecutabil, trebuie să folosim opțiunea -cp în loc de -jar . Vom folosi opțiunea -cp (prescurtare pentru classpath) pentru a specifica fișierul JAR care conține fișierul de clasă pe care dorim să îl executăm:

java -cp jar-file-name-main-class-name [args ...]

După cum puteți vedea, în acest caz, va trebui să includem numele clasei principale în linia de comandă, urmat de argumente .

JAR-ul neexecutabil creat anterior conține aceeași aplicație simplă. Îl putem rula cu orice (inclusiv zero) argumente. Iată un exemplu cu două argumente:

$ java -cp JarExample2.jar com.baeldung.jarArguments.JarExample "arg 1" [email protected]

Și, la fel cum am văzut mai sus, vom vedea următoarea ieșire:

Hello Baeldung Reader in JarExample! There are 2 argument(s)! Argument(1):arg 1 Argument(2):[email protected]

6. Concluzie

În acest tutorial, am învățat două moduri de a rula o aplicație JAR pe linia de comandă cu sau fără argumente.

De asemenea, am demonstrat că un argument poate conține spații și caractere speciale (atunci când este permis de către shell).

Ca întotdeauna, codul pentru exemple este disponibil pe GitHub.