====== 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// */