Java kompilácie a build v príkazovom riadku - library a použitia
V tomto Java tutoriále si vykonáme rozšírenie základných znalostí, ktoré sme sa pri predviedli v predchádzajúcich dieloch. V prvej časti vytvoríme nespustiteľné jar, čo znamená, že vytvoríme knižnicu (library) a v ďalšej časti si opäť vytvoríme spustiteľný jar, ktorý bude využívať metódy obsiahnuté v nami vytvorené knižnici. Z pohľadu natívneho jazyka je to podobné ako * .dll. Výhoda knižníc je tá, že môžete edivat (prípadne rozširovať) len niektoré časti kódu, napr. Tie umiestnené v knižnici, bez toho aby ste buildovali celú aplikáciu znova.
Vytvorenie knižnice (nespustiteľné jar)
Vyrobíme si knižnicu s dvoma balíčky. Každý balíček bude obsahovať len 1 triedu. Prvá trieda bude obsahovať jednu metódu a druhá trieda metódy dve. Knižnica môže samozrejme obsahovať desiatky, stovky, tisíce balíčkov a každý balíček desiatky, stovky, tisíce tried. Maximálny počet metód v triede je 65535.
Ako prvý nás čaká vytvorenie vhodného adresára Knihovna, v
ňom vytvoríme vhodné podadresáre pre dva balíčky balicek1 a
balicek2. Do každého balíčka vytvoríme súbor, ktorý
predstavuje našej triedu. Rovnaký spôsobom v balíka1 vytvoríme súbor pre
zdrojový kód ProgramBalicek1.java príkazom
fsutil file createnew ProgramBalicek1.java 0. Opakujeme aj pre
balicek2 kde je trieda ProgramBalicek2.java príkazom
fsutil file createnew ProgramBalicek2.java 0.
D:\
└── Knihovna
├── balicek1
│ └── ProgramBalicek1.java
└── balicek2
└── ProgramBalicek2.java

Dané súbory otvoríme v Notepade a do daných súborov vložíme tieto zdrojové kódy. Súbory samozrejme uložíme.
Obsah triedy ProgramBalicek1
package balicek1; public class ProgramBalicek1 { public String ziskejText() { return "Zde je muj text"; } public int secti(int a, int b) { return (a + b); } }
Obsah triedy ProgramBalicek2
package balicek2; public class ProgramBalicek2 { public String ziskejText(String in) { return "Poslali jste tento retezec : " + in; } }
Po uložení sa presunieme o úroveň vyššie a zdrojové kódy skompilujeme cez príkazy:
javac balicek1\*.java
a
javac balicek2\*.java
Potom vykonáme kontrolné výpis adresárov, aby sme zistili, či sa kompilácie podarila. Vznikli súbory * .class, takže zdrojové kódy sa úspešné skompilovali.
D:\
└── Knihovna
├── balicek1
│ ├── ProgramBalicek1.class
│ └── ProgramBalicek1.java
└── balicek2
├── ProgramBalicek2.class
└── ProgramBalicek2.java
Potom nás už len čaká tvorba konfiguračného súboru (manifestu)
príkazom fsutil file createnew manifest.man 0, do ktorého
vložíme tento obsah. Potom vykonáme export do jar príkazom
jar cmf manifest.man Knihovna.jar balicek1\*.class balicek2\*.class
Ako vidíte, jedná sa o nespustiteľné triedy, chýba tu trieda sa
spúšťací metódou main().
Manifest-Version: 1.0 Created-By: 1.8.0_144 (Oracle Corporation)
postup:

Teraz sme úspešne vytvorili externé jar, ktorý nie je spustiteľný.
D:\
└── Knihovna
├── Knihovna.jar
├── manifest.man
├── balicek1
│ ├── ProgramBalicek1.class
│ └── ProgramBalicek1.java
└── balicek2
├── ProgramBalicek2.class
└── ProgramBalicek2.java
Vytvorenie aplikácie s knižnicou (external jar)
D:\
└── Program
└── prog
└── Program.java
Opäť nás čaká vytvorenie vhodného adresára Program, v
ňom vytvoríme vhodný podadresár prog pre balík, vytvoríme
zdrojový súbor Program.java príkazom
fsutil file createnew Program.java 0, do ktorého vložíme náš
zdrojový kód opäť napr. Cez Notepad príkazom
notepad Program.java.
package prog; import balicek1.*; import balicek2.*; public class Program { public static void main (String [] args) { System.out.println("Start Programu"); ProgramBalicek1 instance1 = new ProgramBalicek1(); System.out.println("Zde je ziskany text : "+instance1.ziskejText()); System.out.println("Zde je soucet 4 a 5 : "+instance1.secti(4,5)); ProgramBalicek2 instance2 = new ProgramBalicek2(); System.out.println("Zde je ziskany text : "+instance2.ziskejText("Ahoj")); System.out.println("Konec Programu"); } }
Pre úspešnú kompiláciu je potreba daná knižnica a preto ju skopírujeme
príkazom (alternatívne súborovým manažérom)
copy D:\Knihovna\Knihovna.jar D:\Program ` z původního adresáře do našeho aktuálního adresáře (cesty si upravte podle svého umístění). Nyní přichází na řadu kompilace příkazem `javac -cp Knihovna.jar prog\Program.java.
D:\
└── Program
├── Knihovna.jar
└── prog
├── Program.class
└── Program.java
Po úspešnom skompilovaniu si program spustíme
java -cp .;Knihovna.jar prog.Program.

Teraz nás zas čaká tvorba spustiteľného jar súboru. Vytvoríme si
súbor manifestu cez príkaz
fsutil file createnew manifest.man 0.
D:\
└── Program
├── manifest.man
├── Knihovna.jar
└── prog
├── Program.class
└── Program.java
Ďalej vykonáme úpravu daného manifestu cez príkaz
notepad manifest.man, súbor uložíme a Notepad ukončíme.
Manifest-Version: 1.0 Class-Path: Knihovna.jar Main-Class: prog.Program Created-By: 1.8.0_144 (Oracle Corporation)
Build čiže stvorenia spustiteľného projektu vykonáme príkaz:
jar cmf manifest.man Program.jar prog\*.class
Ako vidíte, vytvorili sme Program.jar. No a teraz si daný
program spustíme.
D:\
└── Program
├── Program.jar
├── manifest.man
├── Knihovna.jar
└── prog
├── Program.class
└── Program.java
Spustenie v príkazovom riadku ide buď ako
java -jar Program.jar alebo ako
java -cp Program.jar prog.Program.

Všetko ako vidíte funguje. Nešikovnosť tohto riešenia je, že knižnica musí byť na rovnakej úrovni adresárovej štruktúry ako spúšťací program. Samozrejme si možno v manifeste nastaviť inej adresárovej umiestnenie, ale je nutné dané umiestnenie dodržiavať, inak program prestane fungovať.
Existujú rôzne varianty ako tento možný problém riešiť, napr .:
- Môžeme nakopírovať danú knižnicu do jre
\ lib \ ext spúšťacieho JRE, to jest napr. Do
C:\Program Files\JavaJRE\jre\lib\ext, potom by knižnica mala byť načítaná všade pre každý projekt. Všetky knižnice umiestnené v tomto adresári JVM načíta do CLASSPATH a triedy v týchto * .jar sú dostupné. Toto však funguje u starších Java 8, 7, 6, ... a v novších Java 9, 10 táto funkcia nie je podporovaná. - Prípadne možno skompilované balíčky a triedy v nich umiestnenej (tzv. *
.Class) vyextrahovať
a vložiť do nášho spustiteľného * .jar. Cez príkaz
jar xf Knihovna.jar balicek1získame adresárbalicek1s * .class súbory a tie pridáme do spustiteľného súboru doProgram.jarjar uf Program.jar balicek1. - Alebo najťažšie variant je pridať externý jar do spustiteľného jar a v spustiteľnom jar si naprogramovať ClassLoader, ktorý daný jar načíta do CLASSPATH.
Záver
Toto je zhruba všetko, čo je vhodné vedieť (poznať), ak chcete pracovať v príkazovom riadku bez IDE. Ide to, ale ako som v úvode napísal, lepšie je rozhodne IDE používať. Najvhodnejšie IDE sú podľa rozšírenosti Eclipse, NetBeans a IntelliJ IDEA. Eclipse je absolútne zadarmo ako pre SE tak i EE. NetBeans 8.2 podporuje iba do vr. Java 8, pre Javu 9, príp. 10, 11 je nutné použiť vývojársky build (development build) a budúcnosť NetBeans nevyzerá optimisticky sa plánovanej zmeny licenčnej politiky Oracle u Javy. IntelliJ IDEA je free pre SE a pre EE sa musí kupovať. Ďalšie IDE sú napr. BlueJ alebo JDeveloper.
Stiahnuť
Stiahnutím nasledujúceho súboru súhlasíš s licenčnými podmienkamiStiahnuté 613x (5.37 kB)
