JAR-uri subțiri cu Spring Boot Baeldung
Ultima modificare: 7 aprilie 2020

Tocmai am anunțat noul curs Learn Spring, axat pe fundamentele Spring 5 și Spring Boot 2:
1. Introducere
În acest tutorial, ne vom uita la cum să construiți un proiect Spring Boot într-un fișier JAR subțire, utilizând proiectul spring-boot-thin-launcher.
Spring Boot este cunoscut pentru implementările sale JAR „grase”, unde un singur artefact executabil conține atât codul aplicației, cât și toate dependențele sale.
Boot-ul este, de asemenea, utilizat pe scară largă pentru a dezvolta microservicii. Uneori, acest lucru poate fi în contradicție cu abordarea „JAR grăsime”, deoarece includerea acelorași dependențe în multe artefacte poate deveni o risipă importantă de resurse.
2. Condiții prealabile
În primul rând, avem nevoie de un proiect Spring Boot, desigur. În acest articol, vom analiza versiunile Maven și versiunile Gradle în configurațiile lor cele mai comune.
Este imposibil să acoperiți toate sistemele de construcție și configurațiile de construcție, dar, sperăm, vom vedea suficient de multe principii generale pe care ar trebui să le puteți aplica la configurarea dvs. specifică.
2.1. Proiecte Maven
Într-un proiect Boot construit cu Maven, ar trebui să avem pluginul Spring Boot Maven configurat în fișierul pom.xml al proiectului nostru, părintele sau unul dintre strămoșii săi:
Versiunea dependențelor Spring Boot este de obicei decisă folosind un BOM sau moștenind de la un POM părinte ca în proiectul nostru de referință:
2.2. Proiecte Gradle
Într-un proiect Boot construit cu Gradle, vom avea pluginul Boot Gradle:
Rețineți că, în acest articol, vom lua în considerare doar Boot 2.x și proiecte ulterioare. Thin Launcher acceptă și versiunile anterioare, dar necesită o configurație Gradle ușor diferită pe care o omitem pentru simplitate. Vă rugăm să consultați pagina principală a proiectului pentru mai multe detalii.
3. Cum se creează un JAR subțire?
Spring Boot Thin Launcher este o mică bibliotecă care citește dependențele unui artefact dintr-un fișier inclus în arhivă, le descarcă dintr-un depozit Maven și lansează în cele din urmă clasa principală a aplicației.
Asa de, când construim un proiect cu biblioteca, obținem un fișier JAR cu codul nostru, un fișier care enumeră dependențele sale și clasa principală din bibliotecă care efectuează sarcinile de mai sus.
Desigur, lucrurile sunt puțin mai nuanțate decât explicația noastră simplificată; vom discuta în detaliu câteva subiecte mai târziu în articol.
4. Utilizare de bază
Să vedem acum cum să construim un JAR „subțire” din aplicația noastră obișnuită Spring Boot.
Vom lansa aplicația cu java -jar obișnuit, cu argumente suplimentare opționale pe linia de comandă care controlează Thin Launcher. Vom vedea câteva dintre ele în secțiunile următoare; pagina de pornire a proiectului conține lista completă.
4.1. Proiecte Maven
Într-un proiect Maven, trebuie să modificăm declarația pluginului Boot (vezi secțiunea 2.1) pentru a include o dependență de aspectul personalizat „subțire”:
Lansatorul va citi dependențele din fișierul pom.xml stocat de Maven în JAR-ul generat în directorul META-INF/maven.
Vom efectua construcția ca de obicei, de exemplu, cu mvn install.
Dacă dorim să putem produce atât subțiri cât și subțiri (de exemplu într-un proiect cu module multiple) putem declara aspectul personalizat într-un profil dedicat Maven.
4.2. Maven și dependențe: thin.properties
De asemenea, putem cere ca Maven să genereze un fișier thin.properties în plus față de pom.xml. În acest caz, fișierul va conține lista completă a dependențelor, inclusiv cele tranzitive, iar lansatorul o va prefera peste pom.xml.
Mojo (plugin) pentru a face acest lucru este spring-boot-thin-maven-plugin: properties și, în mod implicit, scoate fișierul thin.properties în src/main/resources/META-INF, dar putem specifica locația acestuia cu proprietatea thin.output:
Rețineți că directorul de ieșire trebuie să existe pentru ca obiectivul să aibă succes, chiar dacă l-am păstrat pe cel implicit.