Függőségkezelés, build eszközök Flashcards
Mire jók a build eszközök?
Arra szolgálnak, hogy elvégezzék a
* tesztelést
* telepítést
* összecsomagolást
* integrálást
Ezeket pedig automatikusan, hogy ne kelljen nekünk újra meg újra ezt elvégeznünk.
Nem csak buildelnek ezek az eszközök, lehet hozzájuk más feladatokat is rendelni.
Többféle eszköz is létezik például a Gradle, a Maven, vagy az Apache ant.
Mi a Gradle?
Egy open source build tool, ami a hatékonyságra és flexibilitásra helyezi a hangsúlyt.
Konfigurációját Kotlin vagy Groovy DSL nyelven lehet elvégezni.
Tud párhuzamosan futtatni és van cachelési lehetőség is benne.
Convention over configuration elv
Szoftverfejlesztési paradigma, a fejlesztőknek csak azokat az eseteket kell külön kezelniük, amik eltérnek egy meghatározott konvenciótól. Konvenció pl. hogy egy mappát mindig adott helyen keressük, vagy egy class neve ugyanaz legyen, mint az adatbázis tábla neve.
Ha új fejlesztő csatlakozik, és foglalkozott már Gradle-el akkor rögtön érteni fogja a konvenciókat.
Lehet az előre definiált konvenciókat bővíteni, megváltoztatni.
Gradle működésének fázisai
A Gradle működése 3 fázisból áll:
1. Inicializáció: A környezetet előkészíti a buildelési folyamathoz és megállapítja melyik projekteket fognak részt venni.
2. Konfiguráció: Előállítja a feladat gráfot a buildhez és megállapítja milyen sorrendben kell majd futtatni őket.
3. Végrehajtás: egyes taskoknak lehet függőségeket adni, így ha egy task lefut, akkor előtte lefuttatja a szükséges függőséget is.
Clean: kiüríti a build mappát. Akkor kellhet, ha valami beragad.
Az egyes függőségek épülhetnek egymásra. A függőségeket távoli repóból szedjük le, ettől hordozható lesz a build tool: ahol van gradle, lehet használni.
A függőségeket könnyen meg lehet találni. A függőségek újra felhasználhatóak, valamint rugalmasak, mert lehet új függőségeket is hozzá adni.
Gradle Wrapper segítségével nem kell minden gépre Gradle. (gradlew)
Build eszköz telepítés
Publikálás repoba, hogy mások is használhassák.
1. Feltöltjük remote repóba localból, vagy ha nekünk kell valami, akkor azt a central repoból tudjuk leszedni. Ezek általában buildelésnél elvégződnek.
- Build konfiguráció:
a. gradle.properties - opcionális, startup optionoket tudunk beadni a gradle-nek
b. settings.gradle – az összes submodulokat ennek segítségével írjuk le és meg tudjuk jelölni a gyökérmodult. Egy build.settings file per multimodul projekt.
c. build.gradle – minden modulban kell, az adott build logikáját írja le. A függőségeket, pluginokat is itt deklaráljuk.
Mik alapján történik a projekt azonosítása?
Projekt azonosítása 3 koordináta alapján történik:
● groupId
● artifactId
● version
Függőség felbontás
használjunk keretrendszereket, könyvtárakat. A Gradle letölti a dependenciákat és eltárolja őket a gépünkön.
Tranzitív dependencia
Függőségek láncolata: ahhoz, hogy valamit használhassunk, annak a függőségei is kellenek.
Dependency scopes
- implementation: Az adott modul használhatja az adott dependency-t
- api: ha egy submodulban apiként írunk le egy függőséget (java-library plugin használata szükséges) akkor tranzitívan a szülő is tudja használni a dependency-t anélkül, hogy ezt a szülőnek külön deklarálni kellene
- testImplementation: Csak teszteléshez szükséges dependency-k
- compileOnly: futásidőben nem fog rendelkezésre állni csak fordításnál
- runtimeOnly: csak futásidőben fog rendelkezésre állni
A verziós konfliktusok miatt alapértelmezetten a legújabbat használja a Gradle, de ezt át tudjuk konfigurálni.