ANT. Aplikační programování v Javě (BI-APJ) - 1 Ing. Jiří Daněček Katedra softwarového inženýrství Fakulta informačních technologií ČVUT Praha



Podobné dokumenty
Ant aneb Ferda Mravenec, práce všeho druhu

Maven. Aplikační programování v Javě (BI-APJ) - 2 Ing. Jiří Daněček Katedra softwarového inženýrství Fakulta informačních technologií ČVUT Praha

Semin aˇr Java N astroje Radek Koˇc ı Fakulta informaˇcn ıch technologi ı VUT Bˇrezen 2012 Radek Koˇc ı Semin aˇr Java n astroje 1/ 42

Teoretické minimum z PJV

JAVA. Nástroje v JDK

Programování v Javě I. Únor 2009

Programování v Javě I. Leden 2008

JAVA. Nástroje v JDK

Algoritmizace a programování

Jazyk C# (seminář 6)

OSGi. Aplikační programování v Javě (BI-APJ) - 6 Ing. Jiří Daněček Katedra softwarového inženýrství Fakulta informačních technologií ČVUT Praha

JAVA V Anotace Java, zimní semestr ,2014 1

KTE / ZPE Informační technologie

Úvod do programovacích jazyků (Java)

NIO. Aplikační programování v Javě (BI-APJ) - 12 Ing. Jiří Daněček Katedra softwarového inženýrství Fakulta informačních technologií ČVUT Praha

1. Téma 12 - Textové soubory a výjimky

Michal Krátký. Úvod do programovacích jazyků (Java), 2006/2007

NetBeans platforma. Evropský sociální fond Praha & EU: Investujeme do vaší budoucnosti

public static void main(string[] args) { System.out.println(new Main().getClass().getAnnotation(Greet.class).text());

UJO Framework. revoluční architektura beans. verze

12. Dokumentace a distribuce aplikací. speciálních dokumentačních komentářích vpisovaných před

Principy objektově orientovaného programování

JAVA V Anotace Java, zimní semestr ,2016 1

Správa projektů a testování

Michal Krátký. Úvod do programovacích jazyků (Java), 2006/2007

Podmínky na zápočet. Java, zimní semestr

RMI Remote Method Invocation

Statické proměnné a metody. Tomáš Pitner, upravil Marek Šabo

Jazyk C# (seminář 5)

JAVA V Anotace Java, zimní semestr ,2015 1

Java Cvičení 01. CHARLES UNIVERSITY IN PRAGUE faculty of mathematics and physics

Obsah přednášky 7. Základy programování (IZAPR) Přednáška 7. Parametry metod. Parametry, argumenty. Parametry metod.

Začínáme s vývojem pro Android

Úvod do programování - Java. Cvičení č.4

Enterprise Java (BI-EJA) Technologie programování v jazyku Java (X36TJV)

Michal Krátký. Úvod do programovacích jazyků (Java), 2006/2007

Michal Podzimek

Java a XML. 10/26/09 1/7 Java a XML

Úvod do programovacích jazyků (Java)

Webové služby a XML. Obsah přednášky. Co jsou to webové služby. Co jsou to webové služby. Webové služby a XML

Základy jazyka C# Obsah přednášky. Architektura.NET Historie Vlastnosti jazyka C# Datové typy Příkazy Prostory jmen Třídy, rozhraní

public class Karel { private int position; public boolean issmiling; public int getposition() { return position;

Obsah přednášky 9. Skrývání informací. Skrývání informací. Zapouzdření. Skrývání informací. Základy programování (IZAPR, IZKPR) Přednáška 9

Class loader. každá třída (java.lang.class) obsahuje referenci na svůj class loader. Implementace class loaderu

Distribuované systémy a výpočty

Kurz Databáze. Přechod na SQL server. Obsah. Vytvoření databáze. Lektor: Doc. Ing. Radim Farana, CSc.

Přehled probírané látky

Projekty pro výuku programování v jazyce Java

JAVA JavaBeans Java, letní semestr

Algoritmizace a programování

Programovací jazyk Java

Doxygen. Jakub Břečka

Anotace a Hibernate. Aleš Nosek Ondřej Vadinský Daniel Krátký

Michal Krátký. Úvod do programovacích jazyků (Java), 2006/2007

Typický prvek kolekce pro české řazení

Textové soubory. alg9 1

PREPROCESOR POKRAČOVÁNÍ

Reflexe. Aplikační programování v Javě (BI-APJ) - 8 Ing. Jiří Daněček Katedra softwarového inženýrství Fakulta informačních technologií ČVUT Praha

Tvorba informačních systémů

Seminář Java II p.1/43

Počítačové laboratoře bez tajemství aneb naučme se učit algoritmizaci a programování s využitím robotů CZ.1.07/1.3.12/

5 Rekurze a zásobník. Rekurzivní volání metody

Generické programování

Distribuované systémy a výpočty

Třídy a objekty. Třídy a objekty. Vytvoření instance třídy. Přístup k atributům a metodám objektu. $z = new Zlomek(3, 5);

Objektově orientované programování

Řídicí struktury. alg3 1

Zapouzdření. Tomáš Pitner, upravil Marek Šabo

Definice třídy. úplná definice. public veřejná třída abstract nesmí být vytvářeny instance final nelze vytvářet potomky

Michal Krátký. Úvod do programovacích jazyků (Java), 2006/2007

Tvorba informačních systémů

Java Výjimky Java, zimní semestr

Tvorba informačních systémů

Reflexe RTTI Runtime Type Identification

Soubor jako posloupnost bytů

Abstraktní datové typy: zásobník

Enterprise Java (BI-EJA) Technologie programování v jazyku Java (X36TJV)

Technologie JavaBeans

Základní pojmy. Matice(řádky, sloupce) Matice(4,6) sloupce

Skriptovací jazyky. Obsah

X-komponenty 3.1. Uživatelská příručka. J. Kocman, V. Trojan

JAVA RMI Java, letní semestr 2018

20. Projekt Domácí mediotéka

DPKOM_06 Dědičnost entit a zpětná volání posluchači

Pokud zadání nerozumíte nebo se vám zdá nejednoznačné, zeptejte se. Pište čitelně, nečitelná řešení nebudeme uznávat.

Úvod do programování v jazyce Java

Java Cvičení 05. CHARLES UNIVERSITY IN PRAGUE faculty of mathematics and physics

OOPR_05. Případové studie

Výjimky. v C# a Javě

Pokud zadání nerozumíte nebo se vám zdá nejednoznačné, zeptejte se. Pište čitelně, nečitelná řešení nebudeme uznávat.

IRAE 07/08 Přednáška č. 1

Algoritmizace a programování. Terminálový vstup a výstup

JAVA V RMI Java, letní semestr

3 KTE / ZPE Informační technologie

Jazyk C# (seminář 9)

NOVINKY V JEE EJB 3.1. Zdeněk Troníček Fakulta informačních technologií ČVUT v Praze

7. přednáška - třídy, objekty třídy objekty atributy tříd metody tříd

IW5 - Programování v.net a C# 4 Pokročilé konstrukce C#

Vlákno odlehčený proces kód vlákna, zásobník privátní ostatní sdíleno s dalšími vlákny téhož procesu

Transkript:

ANT Aplikační programování v Javě (BI-APJ) - 1 Ing. Jiří Daněček Katedra softwarového inženýrství Fakulta informačních technologií ČVUT Praha Evropský sociální fond Praha & EU: Investujeme do vaší budoucnosti

Úvod Apache ANT (ant.apache.org) - Java-orientovaný sestavovací nástroj sloužící k podobným účelům jako unixový make. Vlastnosti: používá XML formát pro zápis sestavovacího skriptu, definuje svoji funkcionalitu pomocí Java tříd (na rozdíl od make, který používa shell script), obsahuje velké množství standardních úloh (task), je snadno rozšiřitelný o uživatelské úlohy.

"Hello World" ANT skript je implicitně umístěn v aktuálním adresáři a jmenuje se build.xml: <?xml version="1.0" encoding="utf-8"?> <project> <echo message="hello, world"/> </project> vyvolání: >ant výstup: Buildfile: /home/danecek/testant/build.xml [echo] Hello, world BUILD SUCCESSFUL Total time: 0 seconds

Úloha Úloha (task) - je základní funkční krok (příkaz), který může být proveden. V sestavovacím skriptu je úloha zavolána stejnojmenným elementem. Úloha může mít atributy (parametry). Obecný tvar volání úlohy: <jméno atribut 1 ="hodnota 1 "... atribut n ="hodnota n "> <vnořený-element> </vnořený-element> </jméno> ANT obsahuje velké množství předdefinovaných úloh, avšak je jednoduché doplnit zákaznickou úlohu. Příklad: úloha echo vypíše na standardní výstup hodnotu atributu message: <echo message="hello, world"/>

Uživatelská úloha (1/2) Nová úloha může být jednoduše přidána jako podtřída třídy org.apache.tools.ant.task. Jednotlivé atributy úlohy jsou definovány jako setry: package mytask; import org.apache.tools.ant.buildexception; import org.apache.tools.ant.task; public class MyHelloTask extends Task { private String who; @Override public void execute() throws BuildException { System.out.printf("Hello %s\n", who); } public void setwho(string who) { this.who = who; } }

Uživatelská úloha (2/2) jarfile s uživatelskou úlohou musí být: 1. umístěn v adresáři: ANT_HOME/lib 2. resp. v adresáři: {user.home}/.ant/lib 3. resp. identifikován parametrem -lib na příkazové řádce: ant -lib ~/antlib/myhellotask.jar Uživatelská úloha musí být v souboru build.xml deklarována pomocí úlohy taskdef: <project> <taskdef name="myhellotask" classname="mytask.myhellotask"/> <MyHelloTask who="chris"/> </project> Výstup: [MyHelloTask] Hello Chris

Cíl Cíl (target) je posloupnost úloh vykonávaná jako jeden celek: <project default="target2"> <echo message = "init"/> <target name = "target1"> <echo message = "run target1"/> </target> <target name = "target2" description = "run target"> <echo message = "run target2"/> </target> </project> Cíl (jeden nebo i více) může být zadán při volání antu: ant target1 target2 Pokud není cíl explicitně zadán vykoná se cíl zadaný jako default atribut elementu project.

Závislost cílů I Mezi cíli může být stanovena závislost pomocí atributu depends: <target name="a"/> <target name="b" depends="a"/> <target name="c" depends="b"/> <target name="d" depends="c,b,a"/> Při vyvolání cíle D proběhne provádění cílů v pořadí: A, B, C, D (na pořadí uvedení cílů v atributu depends nezáleží). Každý cíl je za běhu skriptu vykonán pouze jednou. Atribut description (nepovinný) může být použit pro dokumentaci cílů. Popisy všech cílů jsou vytištěny zadáním parametru -projecthelp. Dokumetované cíle jsou tzv. hlavní (main targets). Cíle bez dokumentace jsou považovány za podružné.

Úloha Javac Prohledává rekurzivně adresář srcdir a nalezené zdrojové soubory, které kompiluje do adresáře destdir. Překládají se pouze soubory, u kterých je classfile starší než zdrojový soubor. Protože adresář destdir musí existovat kombinuje se javac obvykle s úlohou mkdir, která vytvoří adresář: <project basedir=".">... <target name="build" depends="init"> <mkdir dir="classes"/> <javac srcdir = "src" destdir = "classes"/> </target> <project> Atributy dir, srcdir, dstdir jsou vztaženy relativně k adresáři ve kterém je umístřěn sestavovací skript resp. k adresáři zadanému explicitně v elemetu project atributem basedir:

Úloha Java Úloha vykoná zadanou třídu, která musí obsahovat metodu main. Parametry pro metodu main mohou být dány vnořenými elemety arg: <java classname = "main.main" classpath="classes" > <arg value="hello"/> </java> Variantně může být uveden spustitelný jarfile (tzn. opatřený souborem manifest s vlastností (property) Main-Class): <java jar = "dist/main.jar"> <arg value="hello"/> </java>

Úloha Jar Úloha vytvoří jarfile: <jar destfile="dist/lib.jar" basedir="classes"/> Vnořeným elementem manifest je možno umístit v jarfilu soubor manifest: <jar destfile="dist/app.jar" basedir="classes"> <manifest> <attribute name="main-class" value="com.acme.checksites.main"/> </manifest> </jar>

Vlastnosti Vlastnost (property) je pojmenovaná hodnota, která může být předávána jako atribut při volání úlohy. Vyhodnocení vlastnosti se předepisuje závorkami: ${... }: <project> <property name = "pozdrav" value = "Ahoj"/> <echo message = "${pozdrav}"/> </project> Vlastnosti mohou být také umístěny v samostatném souboru, kde je na každé řádce definována jedna vlastnost. Příklad: jednořádkový soubor ant.properties: greeting=hello Soubor se identifikuje atributem file: <project> <property file="ant.properties"/> <echo message = "${greeting}"/> </project>

Příklad jednoduchého projektu (1/5) Program, který využívá jako resource textový soubor: package main; import java.io.inputstream; import java.util.scanner; public class Main { } public static void main(string[] args) { InputStream is = Main.class.getResourceAsStream( "/resources/pozdrav.txt"); Scanner s = new Scanner(is); while (s.hasnextline()) { System.out.println(s.nextLine()); } }

Příklad jednoduchého projektu (2/5) Adresářová struktura projektu:

Příklad jednoduchého projektu (3/5) Soubor project.properties: # Project main class main.class=main.main Soubor build.xml: <project name="my-project" default="dist" basedir="."> <description>simple build file</description> <!-- set global properties for this build --> <property name="src" location="src"/> <property name="target" location="target"/> <property name="classes" location="${target}/classes"/> <property name="dist" location="${target}/dist"/> <property file ="project.properties"/>

Příklad jednoduchého projektu (4/5) <target name="init"> <!-- Create the time stamp --> <tstamp/> </target> <target name="clean" description="clean up" > <!-- Delete the ${target} directory tree --> <delete dir="${target}"/> </target> <target name="compile" depends="init" description="compile the source " > <mkdir dir="${classes}"/> <!-- Compile java from ${src} into ${classes} --> <javac srcdir="${src}" destdir="${classes}"/> </target>

Příklad jednoduchého projektu (5/5) <target name="build" depends="compile" description="generate the distribution" > <!-- Copy resources into classes dir --> <copy todir="${classes}/resources/"> <fileset dir="${src}/resources"/> </copy> <!-- Create the distribution directory --> <mkdir dir="${dist}"/> <!-- Put everything in ${classes} into the MyProject-${DSTAMP}.jar file --> <jar jarfile= "${dist}/myproject-${dstamp}.jar" basedir="${classes}"/> </target> <target name="run" depends="build"> <java classpath="${dist}/myproject-${dstamp}.jar" classname="${main.class}" /> </target>