Spuštění programu z příkazové řádky Základní životní cyklus javového programu • V Javě sice existuje interaktivní (tzv. REPL read-eval-print-loop) prostředí, • většinou však kód napíšeme do souboru, uložíme, přeložíme a spustíme. • Zdrojový kód každé veřejné (public) třídy je umístěn v jednom souboru • např. třída Hello je v Hello.java Rychlé spuštění • V nových verzích Javy lze psát i hodně zhutněně, podobně jiným jazykům. • Prakticky nepříliš použitelné, hodí se skutečně na pár-řádkové věci. Shebang (#!) spouštění #!/usr/bin/env java --source 23 --enable-preview void main() {   println("In new Javas, writing extremely simple apps is finally possible");   var year = readln("Enter the current year (YYYY): ");   println("Current year is " + year); } Table of Contents Základní životní cyklus javového programu . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .  1 Rychlé spuštění . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .  1 Běžný postup . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .  2 Nástroje ve vývojové distribuci. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .  2 Překlad "Ahoj!" . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .  2 Zdrojový kód "Ahoj!" . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .  2 Spuštění "Ahoj!". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .  3 Překlad & Spuštění . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .  3 Co když je tŕída v adresáří (balíku) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .  3 Od Java 11: překlad a spuštění v jednom . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .  4 Praktické informace (aneb co je nutné udělat) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .  4 Spuštění sbaleného programu. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .  4 1  Soubor se nesmí jmenovat s příponou .java. Běžný postup • vytvoření zdrojového textu (libovolným editorem) • překlad (nástrojem javac) • spuštění (nástrojem java) • anebo totéž jednodušeji zelenou šipkou v některém z IDE, třeba v IntelliJ IDEA Nástroje ve vývojové distribuci javac překladač, tj. Hello.java → Hello.class java (nebo jexec) spouštěč přeloženého bytecode javadoc generátor dokumentace jar správce archivů JAR (sbalení, rozbalení, výpis) jshell interaktivní (REPL) prostředí Pod Windows to jsou .exe soubory java, javac… umístěné v podadresáři bin instalace Javy. Překlad "Ahoj!" • Máme nainstalován Java SDK 23 (jen příklad, funguje i s dalšími verzemi) • Jsme v adresáři ~/devel/pb112, v něm je soubor Hello.java • Spustíme překlad javac Hello.java název souboru je včetně přípony .java • Je-li program správně napsán, přeloží se "mlčky" • Vytvoří se soubor Hello.class Zdrojový kód "Ahoj!" Hello.java public class Hello {   public static void main(String[] args) { 2   System.out.println("Ahoj!");   } } Spuštění "Ahoj!" • Spustíme program Hello příkazem java Hello, název třídy je bez přípony .class • V nejnovějších verzích Javy lze spustit rovnou včetně překladu: java Hello.java, pak se přeloží s hned spustí, viz dále. • Je-li program správně napsán a přeložen, vypíše se Ahoj! Překlad & Spuštění Překlad překladačem javac (úspěšný, bez hlášení překladače): Spuštění voláním java: Co když je tŕída v adresáří (balíku) Když je tŕída v balíku, tj. na začátku souboru je: package cz.muni.fi.pb112.hello; Kompilace a spuštění pak vypadá následovně: 3 Pro maven projekty (všechny projekty na cvičení) je nutno být ve adresáři src/main/java. Od Java 11: překlad a spuštění v jednom • Počínaje Java 11 lze na jednoduché(!) programy použít přímý postup: • java HelloWorld.java → program se přeloží a následně spustí • funguje dokonce i tehdy, nebude-li se třída s metodou main jmenovat HelloWorld • 330: Launch Single-File Source-Code Programs Praktické informace (aneb co je nutné udělat) • Cesty ke spustitelným programům PATH musejí obsahovat i adresář /bin • jako C:\Program Files\Java\jdk9.0\bin • Systémové proměnné by měly obsahovat JAVA_HOME= • Např. JAVA_HOME=C:\Program Files\Java\jdk9.0 • Možné je nastavit i proměnnou CLASSPATH= • Např. CLASSPATH=c:\devel\pb162 Spuštění sbaleného programu • Java má formát JAR (Java ARchive) pro distribuci programů složených z mnoha tříd. • Je podobný ZIP s pomocnými soubory navíc. • V archívu se deklaruje, která třída (=její metoda main) se spouští. • Lze pak spouštět jakoby celý archív: java -jar myapp.jar 4