Vydělávej až 160.000 Kč měsíčně! Akreditované rekvalifikační kurzy s garancí práce od 0 Kč. Více informací.
Hledáme nové posily do ITnetwork týmu. Podívej se na volné pozice a přidej se do nejagilnější firmy na trhu - Více informací.

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] - Volby options jsou argumenty JVM.
  • [args...] - Volby args 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čuje classpath, 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í metodu main() (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í:

Argumenty Programu - Kompilace manuálně v Javě

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:

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 10x (1.02 kB)
Aplikace je včetně zdrojových kódů v jazyce Java

 

Předchozí článek
Java kompilace a build v příkazovém řádku - library a užití
Všechny články v sekci
Kompilace manuálně v Javě
Přeskočit článek
(nedoporučujeme)
Java spuštění - JVM argumenty
Článek pro vás napsal Robert Michalovič
Avatar
Uživatelské hodnocení:
6 hlasů
Programuji převážně v Javě SE,EE a trochu nativním C a CUDA. více viz.https://cz.linkedin.com/in/robert-michalovic
Aktivity