Lekce 4 - Java spuštění - Programové argumenty
V minulé lekci, Java kompilace a build v příkazovém řádku - library a užití, jsme si ukázali, jak přes konzoli vytvořit funkční knihovnu.
Dnešní článek o programových argumentech volně navazuje na sérii článků Java kompilace a build přes příkazový řádek. Předvedeme si jak při spuštění přenést do programu nějaké informace (vstupy), aniž bychom je museli programu zadávat z klávesnice. To má např. výhodu, že náš program tak může používat nějaký jiný program, ne jen člověk s klávesnicí.
Spouštěč java
Ke spuštění Java programů dochází přes spouštěč (launcher)
Java.exe, který se nachází v adresáři \bin
v
JDK verzích Java 11+ či u starších verzí, kde je i v JDK i v JRE. Doufám,
že nemusím vysvětlovat, že parametry při spuštění nelze
předat pomocí "double click" na spustitelný soubor jar
např. z
plochy. Respektive lze, ale museli bychom si vyvinout vlastní spouštěč.
Nezapomeňte mít nastavenou systémovou proměnnou
PATH
do adresáře \bin
v JDK ve vašem počítači,
jinak vám příkazy nebudou fungovat.
Jak volat spouštěč
Ukažme si jak se spouštěč volá, nejdříve obecně.
Spuštění .class
Univerzální definice příkazu java
vypadá
ve všech verzích pro spuštění zkompilované třídy .class
takto:
java [options] SpousteciTrida.class [args...]
Volitelné parametry jsou v definici uvedené v hranatých závorkách, které do příkazu pak reálně nepíšeme a nahradíme je skutečnými parametry.
Ostatní příkazy se již mohou lišit podle verze Javy, proto v případě problémů na konci lekce naleznete odkazy na dokumentaci, kde jsou popsané případné drobné změny.
Spuštění .jar
Pokud máme program ve spustitelném .jar
souboru, pak obecný
příkaz vypadá takto:
java [options] -jar Program.jar [args...]
Spouštěcí třída obsahující main()
metodu z
manifest.mf
se načte sama. Případně ji můžeme i definovat my
a to takto:
java [options] -cp Program.jar package.PublicClass [args...]
Význam parametrů
Pojďme si popsat, co jednotlivé části příkazu označují:
java
- Operačnímu systému říkáme, že voláme spouštěč (launcher)java
, a další příkazy jsou již parametry volání.-jar
- Říkáme, že se musí spouštěč pokusit najít v souboru manifestu jméno spouštěcí třídy.[options]
- Volbyoptions
jsou argumenty JVM.[args...]
- Volbyargs
jsou parametry/argumenty programu, které lze předat programu, aby je během svého běhu využíval.Program.jar
- Cesta ke spustitelnému Java programu.-cp
- Označujeclasspath
, při spouštění Java programu bude použito manuální zadání třídy (tzn.public class
) použité v programu.package.PublicClass
- Označení balíčku a třídy obsahující spouštěcí metodumain()
(tzn.public static void main(String [] args)
).
Z logiky věci tedy vyplývá, že v jednom spustitelném jaru můžete mít více spouštěcích tříd, nebo i více spouštěcích metod.
Příklady
Předvedeme si spuštění programu jako spustitelného souboru
jar
na příkladech, co jsme si vytvořili v prvních lekcích
kurzu. Existují tedy dva způsoby spuštění. Varianta s parametrem
-jar
a varianta s parametrem -cp
.
-jar
V případě první varianty stačí pouze název programu a spouštěč si
sám najde spouštěcí třídu ProgramJava.class
definovanou v
manifestu:
java -jar Program.jar
-cp
V případě druhém říkáme spouštěči přes parametr -cp
,
že určíme spouštěcí třídu, která obsahuje metodu main()
v
třídě ProgramJava.class
sami. Pokud nepoužíváme balíčky,
vypadal by kód takto:
java -cp Program.jar ProgramJava
Pokud bychom používali balíčky (packages), pak by spouštěcí příkaz mohl vypadat třeba takto:
java -cp Program.jar balicek.ProgramJava
Předání argumentů programu
Parametry programu jsou samozřejmě mnohem jednodušší než parametry JVM.
Do našeho Java programu nám přijdou jako část pole
String [] args
, kterou známe z hlavní spouštěcí metody
main()
ve spouštěcí třídě.
Vytvoříme si jednoduchý program, kde parametry programu využijeme.
Program bude souboru ArgumentyProgramu.java
:
public class ProgramJava { public static void main (String [] args) { System.out.println("Start Programu"); System.out.println("Pocet argumentu :" + args.length); for (String arg : args) { System.out.println("\t" + arg); } System.out.println("Argument 1 : " + args[0]); System.out.println("Argument 3 : " + args[2]); System.out.println("Argument 5 : " + args[4]); System.out.println("Argument 6 : " + args[5]); System.out.println("Konec Programu"); } }
Parametry jsou tedy řetězce, takže pokud je budete chtít využívat jako např. čísla, je nutné je naparsovat do vhodnějších datových typů.
Jak vidíte, zdrojový kód je skutečně triviální. V první části se
nám vypíše kolik máme argumentů, pak v cyklu je vypíšeme všechny a pak
si vypíšeme pouze některé, které jsme si definovali. Jen připomínám že
Java počítá indexy u pole od 0
a nikoliv od 1
.
Zdrojový kód si samozřejmě zkompilujeme příkazem javac
, aby
nám vznikl ArgumentyProgramu.class
:
javac ArgumentyProgramu.java
a kód si spustíme např. tímto příkazem:
java -cp . ArgumentyProgramu -x info -y test -help informace
Jak vidíte na přiloženém obrázku kompilace programu, jeho spuštění a běh je korektní:
Verze dokumentace Java
příkazu java.exe
Během posledních 10 let došlo k určitým změnám v různých verzích
spouštěče java.exe
. Proto pro jistotu přikládám odkazy na
jednotlivé verze Javy. Je vhodné si pro danou verzi jenž používáte
prohlédnou danou dokumentaci:
- Java06 Dokumentace
- Java07 Dokumentace
- Java08 Dokumentace
- Java09 Dokumentace
- Java10 Dokumentace
- Java11 Dokumentace
- Java12 Dokumentace
- Java13 Dokumentace
- Java14 Dokumentace
V příští lekci, Java spuštění - JVM argumenty, si předvedeme využití JVM parametrů.
Měl jsi s čímkoli problém? Stáhni si vzorovou aplikaci níže a porovnej ji se svým projektem, chybu tak snadno najdeš.
Stáhnout
Stažením následujícího souboru souhlasíš s licenčními podmínkami
Staženo 11x (1.02 kB)
Aplikace je včetně zdrojových kódů v jazyce Java