====== Kompilace a spuštění ======
Při programování obvykle používáme sofistikované vývojové prostředí tzv. IDE.
V případě našeho předmětu je to Netbeans. Netbeans IDE za nás dělá spoustu věcí o které se jako programátoři nemusíme starat.
Měli bychom však vědět, co naše IDE dělá.
Často se nám totiž stane, že IDE nědělá přesně to, co bychom čekali.
Pochopíme-li co se děje v pozadí, budeme lépe připraveni nastalé problémy řešit.
==== JDK - Java Development Kit ====
Co jsme získali, když jsme si stáhli JDK?
Java Development Kit je balíček pro vývoj v Javě. Umožnuje nám programy v jazyce JAVA nejen spouštět, ale i vytvářet.
Hodně zjednodušeně řečeno vám umožňuje váš kód přeložit do spustitelné podoby a následně i spustit.
O tom, jak Java funguje se můžete dočíst například na stránkách [[https://docs.oracle.com/javase/tutorial/getStarted/intro/definition.html |Oraclu]]
Podíváte-li se co obsahuje JDK, tak ve složce ///bin// naleznete programy //java// a //javac//.
Kompilátor //javac// se používá pro překlad zdrojového kódu //.java// do tzv. bytecode - souboru s koncovkou //.class//.
Program //java// pak spustí váš bytecode na JVM (Java Virtual Machine).
Zkuste si v příkazové řádce (v Ubuntu spustíte stiskem Ctrl+Alt+t v Ubuntu) jakou máte nainstalovanou verzi Javy příkazem:
java -version
Jak nainstalovat Javu na váš systém snadno naleznete na internetu.
Na Windows vám může pomoci následující [[https://cw.fel.cvut.cz/wiki/courses/a0b36pr1/tutorials/ant|tutoriál]].
==== Hello World ====
Zkusme si vytvořit jednoduchý program, přeložit(zkompilovat) ho a spustit v příkazovém řádku.
V textovém editoru si vytvořme soubor //HelloWorld.java//.
public class HelloWorld {
public static void main(String[] args){
System.out.println("Hello world!");
}
}
ls
javac HelloWorld.java
ls
java HelloWorld
Další materiál v angličtině: [[http://introcs.cs.princeton.edu/java/11hello/ | Princeton tutorial]]
/*
==== Příklad - Lab01 ====
Zkusme si kompilaci a spuštění trochu složitějšího programu.
Demonstrujeme vám jak vypadá kompilace vaší první úlohy v PR1.
Struktura projektu je již složitější, máme dva zdrojové soubory v adresářové struktuře.
K tomu ve složce //lib// knihovnu //KarelJRobot.jar//.
Nejdříve se dostaneme do projektového adresáře. A zobrazíme si jeho obsah.
cd ownCloud/pr1/pr1-lab01
tree
Vytvoříme si adresář pro zkompilované .class soubory (build/classes jako to dělá IDE Netbeans).
mkdir build
mkdir build/classes
Nyní zkompilujeme oba zdrojové soubory s použítím knihovny a nastavením výstupní složky.
javac -classpath lib/KarelJRobot.jar -d build/classes src/cz/cvut/fel/Lab01Karel.java src/cz/cvut/fel/Lab01Task.java
Můžete se podívat, že se nám vygenerovaly soubory//.class// do složky //build/classes//.
Nyní spustíme program Lab01Task, s tím, že definujeme, kde hledat ostatní soubory .class a knihovnu KarelJRobot.jar.
java -classpath build/classes:lib/KarelJRobot.jar cz.cvut.fel.Lab01Task
Můžete vidět, že kompilace a spuštění i poměrně jednoduchého programu v Javě v příkazové řádce vyžaduje již trochu úsilí.
Proto máme nástroje, které nám s tímto pomohou.
Při práci s Netbeans si nyní dovedeme představit, co minimálně Netbeans potřebuje vědět pro správnou kompilaci a spuštění našeho programu.
Zkuste si, že když změníte aktuální adresář o úroveň výše, nepodaří se Vám již načíst mapu simple.kwld (viz. výpis "Can't read world.")!
cd ..
java -cp pr1-lab01/build/classes:pr1-lab01/lib/KarelJRobot.jar cz.cvut.fel.Lab01Task
Stejný problém nastane v Netbeans pokud máte **Project Folder** nastavenou na jiný adresář než je v tomto případě //pr1-lab01//
*/