3. Serveri tööle saamine TalTechi masinas¶
Näiteprojektina kasutatud klient & server tutoriali serveri osa.
3.1. Ettevalmistus¶
Ava oma serveri projekt IntelliJ IDEA’ga
Teile antud TalTechi masinates on Eesti piires avatud TCP ja UDP pordid 8080-8090, seega määra serveri kuulatav port (pordid) sinna vahemikku
3.2. Vajalike failide genereerimine¶
Teeme Gradles vajalikud muudatused:
Ava (juurtasandil olev)
build.gradleMuuda seda nii, et:
pluginsploki all oleks (ainult)id 'application'lisa plokk
applicationja sinna sissemainClass, mille väärtus viitab sinu projekti sisenemispunktile (nt näiteprojekti järgi,ee.server.Mainviitabee.serverpakis olevaleMainklassile, kust hiljem Java otsibmain()meetodit)
plugins { id 'application' } application { mainClass = 'ee.server.Main' // asendada enda projekti täispika sisenemispunkti nimega (fully qualified name for project entry point, i.e. where the main method is) } ...
Vali IDEA paremalt ribalt Gradle’i menüü ja “Reload All Gradle Projects”

Kui Gradle ikooni ei näe, vali peamenüüst
View->Tool Windows->Gradle
Nüüd vali samast menüüst
Tasks->distributionja tee topelt-klikkdistTarpeal
Voilà, nüüd on
build/distributionskataloogi loodudtararhiivifail, kus on kõik vajalikud failid rakenduse käivitamiseks kokkupakituna sees. (Alternatiivina võib kasutada ka GradledistZipkäsku, et luua zip-arhiiv).
Soovituslik: testime, kas server kohalikult üldse töötab:
Loodud tar-arhiiv tuleks individuaalseteks failideks lahti pakkida. Näiteks:
- Käsurealt:
tar -xvf <arhiivinimi>.tar(näitekstar -xvf server-example-1.0-SNAPSHOT.tar): -x(extract) tähistab lahtipakkimist.-v(verbose) selle valiku kasutamisel näidatakse terminalis kõiki faile, mida käsu käigus töödeldakse.-f(file) võimaldab määrata käsule, millise failiga töötada. Pärast-ftuleb alati konkreetne failinimi (näiteksarhiivinimi.tar).
- Käsurealt:
Windows File Explorer’is arhiivile parem-klikk ja
Extract All...
Kui oled arhiivi lahti pakkinud, jooksuta tekkinud
bin/kaustas olevat vastavat faili:käsurealt
./bin/<teie-faili-nimi>(Linux/Mac) või.\bin\<teie-faili-nimi>.bat(Windows PowerShell) näiteks.\bin\server-example.batWindows File Explorer’is topelt-klikk antud
.batfailile (NB! Nii ei pruugi näha veateateid, kui aken läheb kohe kinni)
Peaksid nägema tuttavat serveri väljundit!
3.3. Faili TalTechi masinasse saamine¶
Soovituslik: testime, kas SSH ühendus üldse töötab:
Ava käsurida, kus lõid võtmepaari
ssh-keygen’iga (kust avaliku võtme GitLabi kopeerisid)Windows: kas PowerShell, või eraldi paigaldatud WSL või Git Bash
Linux/Mac: Terminal
Jooksuta
ssh ubuntu@IP, kus IP asenda Moodles olevast tabelist enda tiimi omaga. (P.S., kui tabel on eelmisest aastast vana, anna projekti chatis märku)Kui küsitakse parooli, ei leia ssh-programm üles sinu privaatvõtit; selle saab vajadusel ette anda argumendiga
-i path/to/private_key
Kui OK, siis hetkel võib ühenduse lõpetada (
exitkäsk võiCtrl + D)
Kopeerime loodud faili üle SSH:
PowerShell/Terminal (enda kohalikus arvutis):
scp source target, näiteksscp server-example-1.0-SNAPSHOT.tar ubuntu@193.40.255.43:/home/ubuntu(ikka asendada source ehk tar faili nimi ja IP vastavalt enda projektile)Ka
scp’le saab vajadusel anda privaatvõtme asukoha-i’ga ette
3.4. Serveri käivitamine ja töös hoidmine¶
SSH masinasse:
ssh ubuntu@IP- Peaksid kohe sattuma kasutaja “ubuntu” kodukataloogi (
/home/ubuntu).Kiire meeldetuletus mõnest Linuxi käsust:pwd- print working directorycd dir- change work. dir. into 'dir'ls -la(Ubuntus aliasla) - list all (incl. hidden) files in current work. dir.
Pakime tar-i lahti:
tar -xvf <arhiivinimi>.tarPaneme serveri käima:
./<teie-faili-nimi>/bin/<teie-faili-nimi>näiteks:./server-example-1.0-SNAPSHOT/bin/server-exampleVajadusel uuenda Java versiooni, nt
sudo apt install openjdk-17-jre-headless(või 21, …)
Kuidas hoida serverit töös pärast SSH-st väljalogimist? Vaata: https://askubuntu.com/questions/8653/how-to-keep-processes-running-after-ending-ssh-session (nt
tmuxvõinohup ... &variant)
3.5. Alternatiiv serveri jooksutamiseks - fat/uber JAR¶
Teine variant on lisada build.gradle lõppu järgnevad read, seejärel
jooksutada Gradle’i jar käsku. builds/libs kataloogi luuakse üks
rasvane JAR-fail, mida saab samamoodi TalTech-i masinasse scp’ga
kopeerida ja seda jooksutada: java -jar failinimi.jar.
jar {
manifest {
attributes(
'Main-Class': 'siia asenda mainClass nagu esimeses variandiski'
)
}
duplicatesStrategy = DuplicatesStrategy.EXCLUDE
from {
configurations.runtimeClasspath.collect { it.isDirectory() ? it : zipTree(it) }
}
}
Lisainfo:
Gradle "Building Java applications": https://docs.gradle.org/current/userguide/building_java_projects.html#sec:building_java_applications
Gradle "The Application Plugin": https://docs.gradle.org/current/userguide/application_plugin.html#application_plugin
StackOverflow "Creating runnable JAR with Gradle": https://stackoverflow.com/a/21743527
Baeldung "Creating a Fat Jar in Gradle": https://www.baeldung.com/gradle-fat-jar
3.6. Kliendi JAR-faili loomine¶
Ava IDEA’s kliendi projekt ja vali Gradle menüüst desktop ->
Tasks -> Other -> dist. Kataloogi build/libs luuakse
JAR-fail, mida Javaga käivitada.
Tegelikult kasutatakse sama "fat JAR" meetodit, nagu ülal kirjeldatud (vaata Gradle build faili desktop/build.gradle sisu).
Kui mingil heal põhjusel kasutada libGDX-i serveri poolel, tuleks samuti seda meetodit kasutada.
Lisainfo:
libGDX "Deploying your application": https://libgdx.com/wiki/deployment/deploying-your-application
3.7. Huvitavat¶
Kõik saab ära teha ka käsurealt (vs. IDEA menüü kaudu, nt
./gradlew distTar või Windows PowerShellis
.\gradlew.bat distTar).
Gradle loodud build kausta võib vabalt kustutada (seda teeb ka
Gradle clean task).
Ka JAR-fail on zip-fail. Selle sisu saab lahti pakkimata vaadata nt nii:
käsurealt
jar -tf fail.jarvõiunzip -l fail.jarmistahes graafilise arhiivitööriistaga, nt 7-Zip või WinRAR.