Kihagyás

02 óra

A CodeMetropolis fordítása

A forráskódból történő fordítás lépéseit jelen tananyag tartalmazza. A sikeres fordítás érdekében fontos kiemelni az előfeltételek teljesítését, amelyhez szükséges lépéseket szintén ismertetünk az alábbiakban. A projekt repositoryban olvasható, hogy a CodeMetropolis fordításához a Java 1.8, valamint a Maven 3.8.3 verzióra lesz szükségünk. A gyakorlatban a Maven 3.6.x is működik. Ha Linux alatt fordítunk, előfordulhat, hogy az általunk használt Linux disztribúció repositorijában még a Maven 3.6 valamely verziója áll rendelkezésre.

Java környezet beállítása

A Java releasek gyakran változnak, nem ritka az sem, hogy egy gépen több telepített verzióval is találkozunk. Az egyes verziók jól megférnek egymás mellett, mind a Windows, mind a Linux esetében eltérő könyvtárakba kerülnek telepítésre. Ugyanakkor az eltérő verziók egyazon időben nem használhatók együtt. Az egyes verziók kiválasztását operációs rendszer szinten, vagy az integrált fejlesztői környezetben (Eclipse, IntelliJ IDEA) is elvégezhetjük.

Windows környezet

Ha nincs még telepítve a gépen Java 1.8, akkor azt erről az oldalról töltsük le. Válasszuk ki az OS-nek megfelelő verziót! Windows környezetben egy exe fájlt kapunk, amelynek futtatásával a letöltött Java környezet telepítésre kerül a gépünkre. A Windows rendszereken a Java a C:\Programfájlok\Java vagy 32 bites Windows esetén a C:\Programfájlok (x86)\Java könyvtárba települ. Ezen a könyvtáron belül a találhatók az egyes telepített Java verziók. A jdk könyvtárak a fejlesztői csomagokat is tartalmazzák, míg a jre csak a futási környezetet. A futtatáshoz a verziókat tartalmazó könyvtárakon belül elhelyezkedő bin alkönyvtár elérését kell biztosítanunk.

Windows és ORACLE Java esetében települ egy Java Control Panel alkalmazás, amelynek felületén kiválasztható felhasználó és rendszer szinten is a használni kívánt Java környezet.

Az aktuális környezetet a Windows-ban a Speciális rendszerbeállításokon keresztül lehet módosítani, amelyet a Gépházon belül a Névjegy linken történő kattintással is elérhetünk.

Rendszer tulajdonságai

A Rendszer tulajdonságai panelen a Speciális tabon keresztül a Környezeti változók nyomógombra kattinva a PATH és JAVA_HOME környezeti változók értékét kell beállítani. A PATH minden esetben a kiválasztásra kerülő Java verziót tartalmazó könyvtáron belüli bin alkönyvtárra kell, hogy mutasson, míg a JAVA_HOME értékének a kiválasztott Java verziót tartalmazó könyvtár elérési útját kell megadni.

Példa a környezeti változók értékére:

1
%PATH% = C:\WINDOWS\system32;C:\WINDOWS;C:\Program Files\Java\jdk-17\bin
1
%JAVA_HOME% = C:\Program Files\Java\jdk-17

A környezeti változók módosítását követően a gépet újra kell indítani. Azt, hogy megfelelő Java verzió áll-e a rendelkezésünkre, CMD-n, vagy a PowerShell-ben kiadott Java -version paranccsal lehet ellenőrizni.

1
2
3
java version "1.8.0_202"
Java(TM) SE Runtime Environment (build 1.8.0_202-b08)
Java HotSpot(TM) 64-Bit Server VM (build 25.202-b08, mixed mode)

Linux környezet

A Linux disztribúciónkban használt csomagkezelő szoftvertől függően eltérő telepítési metódusokat kell alkalmaznunk a különböző disztribúciók esetében. A Debian csomagok (.deb) telepítéséhez a dpkg -i csomag_neve.deb parancs, vagy a gdebi program használható. Debian alapú csomagkezelőt használ a Debian, az Ubuntu, a Knoppix, az MX Linux, a Linux Mint, a Kali és még nagyon sok más disztribúció.

Az rpm csomagok telepítéséhez a rpm -ivh csomag_neve.rpm parancsot tudjuk használni. Használhatjuk a dnf install csomag_neve.rmp és yum install csomag_neve.rpm csomagkezelőket is, ha azok valamelyike rendelkezésre áll. Az ilyen csomagkezelők a RedHat disztribúció alapjaira épülő Linuxokon találhatók meg, mint például a RedHat, a CentOS, a Fedora, az Oracle és a Mandriva, hogy csak az ismertebbeket említsük.

Maguk a Linux disztribúciók csomagkezelői is tartalmaznak valamilyen nyílt forráskódú Java verziót, az OpendJDK valamely változata elérhető a disztribúcióhoz tartozó repository-ból és egyszerűen telepíthető. Például Ubuntu alatt az apt install paranccsal is telepíthetjük a repository-ban lévő Java környezetet.

sudo

A csomagkezelők használatához az érintett felhasználónak tagja kell lenni a sudo csoportnak, amely csoporthoz történő hozzáadás a root felhasználó joga.

A Java csomagok archívumokban is elérhetők (azaz tar.gz vagy tgz kiterjesztéssel ellátott fájlokban). Ha ilyen formában áll rendelkezésre a környezet, akkor a következőképpen járhatunk el:

Tape ARchive

A tar.gz vagy tgz kiterjesztéssel rendelkező archiv fájlokat tarballnak is nevezik. A tar a Tape ARchive szó rövidítése. A programot a szalagos meghajtókra történő mentésekre tervezték, amelynek segítségével szekvenciális bitstreamet állítottak elő. A lemezen ez a formátum a .tar, amelyet a gzip program segítségével tömörítünk és kapjuk a fent említett tar.gz vagy tgz kiterjesztésű archivumokat.

  • Válaszd ki a könyvtárat, ahova telepíteni szeretnéd a Java környezetet. Általában az /usr/lib/jvm/java_verzió szokott lenni az az elérési útvonal, ahova a csomagkezelők végzik a telepítést. Fontos megemlíteni, hogy tetszőleges könyvtárat választhatsz, a JAVA_HOME környezeti változó beállítható a .bashrc profile fájlban az export JAVA_HOME='/usr/lib/jvm/java-19-openjdk-amd64' sor felvételével. Szerkesztést és mentést követően source ~/.bashrc parancs futtatásával elérhetővé teheted az általad választott telepítés helyét.

root jogosultság szükséges

A rendszerkönyvtárakba történő telepítéshez root jogosultság szükséges.

  • A kiválasztott könyvtárba bontsd ki az archívumot.
  • Állítsd be a környezeti változókat a .bashrc profilban és töltsd azt újra.

A Java környezet elérési útvonalát, illetőleg az aktuálisan használt Java verziót (és más több verzióban is szükséges környezetet) a Linuxban ügyes módszerrel is beállíthatjuk. Amennyiben több verziót szeretnénk egymás mellett használni, erre szükségünk is lesz. A program, amit használni kell az update-alternatives.

  1. Telepítés: Futtassuk a sudo update-alternatives --install /usr/bin/java java /usr/lib/jvm/java_verzio/bin/java 1 parancsot. A parancs első paramétere olyan bin könyvtárra mutat, ahol a java binárisra mutató link megtalálható és ez az útvonal a parancssorból elérhető. A második paraméter a használt parancsnak a neve. Ezt követi az elérési út, ahova az archivumot kibontottad, azon belül is a konkrét java binárisod elérhetőségét kell specifikálni. Az utolsó paraméter pedig egy prioritás, amelynek egyedinek kell lennie. Ez egyben egy olyan sorszám, amelyre később hivatkozni fogsz.
  2. Beállítás: Telepítést követően be kell állítanod azt a környezetet, amit használni kívánsz. A beállítás során azt jelölöd ki, hogy melyik környezetre mutasson az usr/bin/java. Add ki az update-alternatives --config java parancsot és a megjelenő listából válaszd ki egyszerűen azt a környezetet, amelyet használni szeretnél.

Fejlesztői környezetek

Az Eclipse és a IntelliJ IDEA is megkönnyíti a használt környezet kiválasztását. Az Eclipse esetében a projekt létrehozásakor megjelenő GUI-n választható ki a használt Java környezet.

Új projekt

Ha nem elérhető a keresett környezet, akkor a Configure JREs... linken kattintva a korábban már kicsomagolt Java környezet elérési útját meg tudjuk adni.

Új projekt

Meglévő projekt esetében a projekt beállításának lapján tudjuk a Java környezetet módosítani.

Az IntelliJ IDEA beállításához az ezen az oldalon kapsz segítséget.

Git clone

A CodeMetropolis fordításához klónozzuk a projektet a GitLab repositoryból. A portál git verziókövető rendszert használ.

Verziókövető rendszerek

A verziókövető rendszerek olyan szoftverek, amelyek nyomon követik és kezelik a fájlrendszerben végzett módosításokat. Lehetővé teszik a szoftver különböző verzióinak tárolását, biztosítják az egyes fejlesztési vonalak elérését, nyilvántartják a verziók közötti különbségeket, lehetővé teszik a korábbi verziókra történő visszatérést, a konfliktust okozó módosítások ellenőrzését, feloldását, a folyamat elágazását, és ezáltal újabb fejlesztési folyamatok létrehozását, valamint a fejlesztési ágak összeillesztését.

Központosított vs. elosztott verziókezelő rendszerek

A verziókövető rendszerek lehetnek központosítottak vagy elosztottak. A központosított verziókezelő rendszerekben a változásokat egy központi szerveren tárolják, amelyen keresztül a fejlesztők kommunikálnak egymással. Az elosztott verziókezelő rendszerekben minden fejlesztő saját példányt tart a teljes verziótörténetről, és a változtatásokat közvetlenül egymás között osztják meg. A központosított verziókezelő rendszerek előnye, hogy egyszerűbbek és könnyebben kezelhetőek, míg az elosztott verziókezelő rendszerek előnye, hogy decentralizáltak és rugalmasabbak. A legnépszerűbb központosított verziókezelő rendszerek közé tartozik a Subversion (SVN), míg az elosztott verziókezelő rendszerek közé tartozik a git.

A git egy elosztott verzókezelő rendszer, azaz nincs kitüntetett szerver, - a GitLab sem az -, azonban a gyakorlatban mégis használunk olyan védett repositorykat (GitLab, GitHub), amelyeket de facto szervernek tekinthetünk.

Egy új fejlesztési projektbe történő bekapcsolódás legegyeszerűbb módja, ha a repository-t klónozzuk a saját gépünkre. A klónozás során a teljes repositoryról készül egy másolat a gépünkre. Ahhoz, hogy ez működjön, a saját gépünkre is telepíteni kell a git környezetet.

Nyissuk meg a CodeMetropolis oldalát és kattintsunk a Code nyomógombra. A megjelenő dialóguson belül válasszuk ki a Clone with HTTPS címhez tartozó linket. Másoljuk ki a linket, majd írjuk adjuk ki a git parancssorban a következő parancsot: git clone https://git-okt.sed.inf.szte.hu/rf2/2024/CodeMetropolis.git. A repositoryról ekkor egy másolat készül a gépünkre.

Klónozás

A git clone parancs feladata a paraméterként megadott repositoryról, illetőleg branchről egy másolat készítése a saját gépünkre. Mikor klónozunk, a kijelölt repository teljes történetéről másolatot kapunk.

Maven

Az Apache Maven a build folyamatok automatizálására alkalmazható tool. A szoftver plugin alapú architektúrára épül. A build folyamat függőségeinek feloldásához a hiányzó csomagokat az Internetről tölti le és telepíti. A Maven projektek specifikálására a pom.xml (Project Object Model) fálj használatos, amely az általános definíciókon túl, tartalmazza a függőségek meghatározását is.

Az alábbi kódrészletben egy pom.xml egy részlete látható:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
<project>
  <!-- model verzió mindig 4.0.0 a Maven 2.x POM-oknak -->
  <modelVersion>4.0.0</modelVersion>

  <!-- projekt koordináták, olyan értékek csoportja amely egyedileg azonosítja ezt projektet -->
  <groupId>com.mycompany.app</groupId>
  <artifactId>my-app</artifactId>
  <version>1.0</version>

  <!-- könyvtár függőségek -->

  <dependencies>
    <dependency>
      <!-- szükséges könyvtárak -->
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <version>3.8.1</version>
      <!-- ez a függőség csak a tesztek futtatáshoz és fordításához használatos -->
      <scope>test</scope>
    </dependency>
  </dependencies>
</project>
A projekt definiálása során a feladatunk gyakran a függőségek szakasz (<dependencies>) kiegészítése. Ebben a szakaszban meg kell adnunk a használni kívánt package nevét, verzióját, esetenként egyéb információkat, mint a fenti pédában a scope. A függőségeket az online Maven repository-k alapján oldja fel a rendszer, nekünk csak hivatkozni kell rájuk a pom.xml-ben.

Az alábbi ábra a Maven által automatikusan generált könyvtárszerkezetet illusztrálja:

Maven

A Maven build életciklusa több fázisból áll, amelyek egymást követve futnak le annak érdekében, hogy a folyamat végén a kívánt build előálljon. A fázisok jellemzően a validáció (mvn validate) fordítás (mvn compile), teszt futtatás (mvn test), csomag készítés (mvn package), telepítés (mvn install), csomagok másolása (mvn deploy), stb. lépéseket tartalmazzák. Részletes leírást a Maven használatáról ezen az oldalon találunk.

Ha a Maven-t parancssorban használjuk, akkor minden egyes lépés egymást követően futtatható. Például a fordítás (compile) futtatásához adjuk ki az mvn compile parancsot. Ha a korábbi fordítás során előállt fájloktól szeretnénk megtisztítani a projektünket, akkor az mvn clean parancs segít ebben.

A CodeMetropolis buildeléséhez a projekdefiníciós fájl már rendelkezésre áll. A buildeléshez a Maven 3.8.3 verziót javasoljuk, de 3.6.x verzióval is működik.

CodeMetropolis projekt fordítása

Lépjünk be a klónozott projekten belül a sources könyvtárba. Ebben a könyvtárban található a forráskód, illetőleg a projektdefiníciós pom.xml fájl is.

Adjuk ki az mvn clean package parancsot! Az mvn clean egy Maven parancs, amely lehetővé teszi, hogy törölje az előzőleg lefordított Java .class fájlokat és erőforrásokat (például .properties) a projektben. A clean parancs használata után a projekt tiszta lappal indul. Az ezt követő mvn package (a fenti parancsban összevonva szerepel) fordítja le a programot és készíti el a .jar futtatható fájlokat.

IDE használata

A Maven mind az Eclipse, mind az IntelliJ IDEA esetén integrált módon beépül a fejlesztői környezetbe, azaz menüből, illetőleg linkekből elérhető és a cél kiválasztásán keresztül kattintással futtatható.

Például az Eclipse környezet esetében az importált Maven projektnél a Package Explorerben kattintsunk jobb egérgombra a fordítani kívánt csomagra, majd a Run As... parancson belül válaszuk ki a kíván Maven célt.

Maven projekt importálása

Az IDE-k esetében figyeljünk arra, hogy a projekt importja során specifikáljuk a felkínált lehetőségekből, hogy Maven projekt importjáról van szó. Az importálás során a projekt könyvtárának azt a könyvtárat kell megadni, ahol a pom.xml megtalálható.

Maven projekt import

Maven projekt következő lépés

Projekt fordítása IntelliJ IDEA környezetben

Az alábbiakban egy rövid bemutató segítségével adunk támogatást az IntelliJ IDEA környezet használatához a CodeMetropolis projekt fordításához. A hallgatók számára opcionális lehetősége továbbra is választani a IntelliJ IDEA és az Eclipse környezet között.

  1. Importáljuk a projektet Maven projekt formájában!

    IntelliJ 1 IntelliJ 2

  2. Buildeljük az alkalmazást! A keretrendszer, mivel Maven projektként lett importálva a folyamatban automatikusan használni is fogja a Mavent. A build során elkészült class fájlok a target könyvtárban találhatók.

    IntelliJ 3

  3. Ahhoz, hogy a clean célt is elérjük, a Maven-t az alábbiak szerint konfiguráljuk az IntelliJ IDEA keretrendszerben!

    IntelliJ 4

  4. A csomagok futtatásához állítsuk be a használni kívánt Java környezetet is!

    IntelliJ 5