ITnetwork summer 2020
Pouze tento týden sleva až 80 % na e-learning týkající se Pythonu
80 % bodů zdarma na online výuku díky naší Letní akci!

Lekce 4 - Java spuštění - Programové argumenty

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...]
Tento výukový obsah pomáhají rozvíjet následující firmy, které dost možná hledají právě tebe!

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

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ů.


 

Stáhnout

Staženo 2x (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
Manuální kompilace v Javě
Článek pro vás napsal Robert Michalovič
Avatar
Jak se ti líbí článek?
Ještě nikdo nehodnotil, buď první!
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 (4)

 

 

Komentáře

Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zatím nikdo nevložil komentář - buď první!