JAVA, zimni semestr 2015 - d3s.mff.cuni.cz · Java, zimní semestr 2015 3.11,2015 8 Funkcionální...

60
Java, zimní semestr 2015 3.11,2015 1 JAVA JAVA Anotace

Transcript of JAVA, zimni semestr 2015 - d3s.mff.cuni.cz · Java, zimní semestr 2015 3.11,2015 8 Funkcionální...

Page 1: JAVA, zimni semestr 2015 - d3s.mff.cuni.cz · Java, zimní semestr 2015 3.11,2015 8 Funkcionální interface kde lze lambda výrazy použít? tam, kde se očekává instance interfacu

Java, zimní semestr 20153.11,2015 1

JAVAJAVA

Anotace

Page 2: JAVA, zimni semestr 2015 - d3s.mff.cuni.cz · Java, zimní semestr 2015 3.11,2015 8 Funkcionální interface kde lze lambda výrazy použít? tam, kde se očekává instance interfacu

Java, zimní semestr 20153.11,2015 2

AnotaceAnotace● (metadata)● od Java 5● umožňují přidat informace k elementům v programu

(ke třídám, metodám, atributům,...)– obecně je lze použít všude tam, kde lze napsat nějaký

modifikátor viditelnosti● zapisují se @JmenoAnotace● lze definovat vlastní

– určit, kde je lze napsat, jak používat,...● předdefinované anotace v balíku java.lang

– @Deprecated– @Override– @SuppressWarnings– ...

Page 3: JAVA, zimni semestr 2015 - d3s.mff.cuni.cz · Java, zimní semestr 2015 3.11,2015 8 Funkcionální interface kde lze lambda výrazy použít? tam, kde se očekává instance interfacu

Java, zimní semestr 20153.11,2015 3

Předdefinované anotacePředdefinované anotace● @Deprecated

– označení API, které by se nemělo používat● náhrada za tag z dokumentačních komentářů

● @Override– označení, že metoda v potomku předefinovává

metodu z předka– pokud nic nepředefinovává => kompilátor odmítne

třídu přeložit● @SuppressWarnings

– zamezí vypisování varování při překladu– parametr – třída varování

● 2 třídy– unchecked – varovaní při „nevhodném“ používání

generických typů– deprecation – varování při použití „deprecated“ elementů

– př. @SuppressWarnings(“unchecked“) @SuppressWarnings({“unchecked“, “deprecation“})

Page 4: JAVA, zimni semestr 2015 - d3s.mff.cuni.cz · Java, zimní semestr 2015 3.11,2015 8 Funkcionální interface kde lze lambda výrazy použít? tam, kde se očekává instance interfacu

Java, zimní semestr 20153.11,2015 4

JAVAJAVA

Lambda výrazy

Page 5: JAVA, zimni semestr 2015 - d3s.mff.cuni.cz · Java, zimní semestr 2015 3.11,2015 8 Funkcionální interface kde lze lambda výrazy použít? tam, kde se očekává instance interfacu

Java, zimní semestr 20153.11,2015 5

MotivaceMotivace● obsluha událostí v GUI● implementace komparátoru● implementace vlákna● …

– běžně pomocí anonymní vnitřní třídy

interface Comparator<T> { int compare(T o1, T o2);} class Arrays {

... void sort(T[] a, Comparator<T> c);}

Arrays.sort(array, new Comparator<AClass> () { public int compare(AClass o1, AClass o2) { return o1.x - o2.x; }});

vždy interfaces jednou metodou

Page 6: JAVA, zimni semestr 2015 - d3s.mff.cuni.cz · Java, zimní semestr 2015 3.11,2015 8 Funkcionální interface kde lze lambda výrazy použít? tam, kde se očekává instance interfacu

Java, zimní semestr 20153.11,2015 6

MotivaceMotivace● předchozí příklad pomocí lambda výrazů

● zjednodušenělambda výraz ~ blok kódu s parametry

● od Java 8

Arrays.sort(array, (o1, o2) -> o1.x - o2.x );

Page 7: JAVA, zimni semestr 2015 - d3s.mff.cuni.cz · Java, zimní semestr 2015 3.11,2015 8 Funkcionální interface kde lze lambda výrazy použít? tam, kde se očekává instance interfacu

Java, zimní semestr 20153.11,2015 7

Příklady lambda výrazůPříklady lambda výrazů● (int x, int y) -> x + y

● (x, y) -> x - y

● () -> 42

● (String s) -> System.out.println(s)

● x -> 2 * x

● c -> { int s = c.size(); c.clear(); return s; }

Page 8: JAVA, zimni semestr 2015 - d3s.mff.cuni.cz · Java, zimní semestr 2015 3.11,2015 8 Funkcionální interface kde lze lambda výrazy použít? tam, kde se očekává instance interfacu

Java, zimní semestr 20153.11,2015 8

Funkcionální interfaceFunkcionální interface● kde lze lambda výrazy použít?

tam, kde se očekává instance interfacu s jednou abstraktní metodou

= funkcionální interface

● lambda výraz je instance funkcionálního interfacu

● alelambda výraz neobsahuje informaci o tom, který funkcionální interface implementuje

Page 9: JAVA, zimni semestr 2015 - d3s.mff.cuni.cz · Java, zimní semestr 2015 3.11,2015 8 Funkcionální interface kde lze lambda výrazy použít? tam, kde se očekává instance interfacu

Java, zimní semestr 20153.11,2015 9

Typ lambda výrazuTyp lambda výrazu● stejný lambda výraz lze přiřadit do různých interfaců

Runnable r = () -> {};AutoCloseable r = () -> {};

● lambda výrazy jsou objekty

Runnable r = () -> {}; Object o = r;

● alelambda výrazy nelze (přímo) přiřadit do typu Object

Object r = () -> {};

Page 10: JAVA, zimni semestr 2015 - d3s.mff.cuni.cz · Java, zimní semestr 2015 3.11,2015 8 Funkcionální interface kde lze lambda výrazy použít? tam, kde se očekává instance interfacu

Java, zimní semestr 20153.11,2015 10

Funkcionální interfaceFunkcionální interface● @FunctionalInterface

– anotace– pro označení funkcionálního interface

● použití není nutné– podobně jako @Override

Page 11: JAVA, zimni semestr 2015 - d3s.mff.cuni.cz · Java, zimní semestr 2015 3.11,2015 8 Funkcionální interface kde lze lambda výrazy použít? tam, kde se očekává instance interfacu

Java, zimní semestr 20153.11,2015 11

Reference na metodyReference na metody● String::valueOf

– reference na statickou metodu– ekvivalent: x -> String.valueOf(x)

● Object::toString– reference na nestatickou metodu– ekvivalent: x -> x.toString()

● x::toString– reference na metodu konkrétního objektu– ekvivalent: () -> x.toString()

● ArrayList::new– reference na konstruktor– ekvivalent: () -> new ArrayList<>()

Page 12: JAVA, zimni semestr 2015 - d3s.mff.cuni.cz · Java, zimní semestr 2015 3.11,2015 8 Funkcionální interface kde lze lambda výrazy použít? tam, kde se očekává instance interfacu

Java, zimní semestr 20153.11,2015 12

Lambda výrazyLambda výrazy● lambda výrazy nepřidávají nový prostor (scope)

viditelnosti proměnných

Path first = Paths.get("/usr/bin");Comparator<String> comp = (first, second) ->

Integer.compare(first.length(), second.length());

● this v lambda výrazu odkazuje na this metody, ve které je výraz vytvořen

public class Application { public void doWork() { Runnable runner = () ->

{System.out.println(this.toString());}; }}

Page 13: JAVA, zimni semestr 2015 - d3s.mff.cuni.cz · Java, zimní semestr 2015 3.11,2015 8 Funkcionální interface kde lze lambda výrazy použít? tam, kde se očekává instance interfacu

Java, zimní semestr 20153.11,2015 13

JAVAJAVA

Nástroje v JDK

Page 14: JAVA, zimni semestr 2015 - d3s.mff.cuni.cz · Java, zimní semestr 2015 3.11,2015 8 Funkcionální interface kde lze lambda výrazy použít? tam, kde se očekává instance interfacu

Java, zimní semestr 20153.11,2015 14

NástrojeNástroje● javac● javadoc● jdb● javah● jconsole● ...

Page 15: JAVA, zimni semestr 2015 - d3s.mff.cuni.cz · Java, zimní semestr 2015 3.11,2015 8 Funkcionální interface kde lze lambda výrazy použít? tam, kde se očekává instance interfacu

Java, zimní semestr 20153.11,2015 15

JAVAJAVA

javadoc

Page 16: JAVA, zimni semestr 2015 - d3s.mff.cuni.cz · Java, zimní semestr 2015 3.11,2015 8 Funkcionální interface kde lze lambda výrazy použít? tam, kde se očekává instance interfacu

Java, zimní semestr 20153.11,2015 16

PřehledPřehled● nástroj na automatické generování dokumentace ze

zdrojových kódů● deklarace tříd atd. plus dokumentační komentáře

– dokumentace je přímo v kódu– snadno se udržuje aktualizovaná

● výstup – (implicitně) HTML stránky● dokumentační komentáře

/** komentar */– před popisovaný element– uvnitř – text + speciální tagy + html kód

● program javadoc– ve standardní distribuci– vygeneruje dokumentaci

Page 17: JAVA, zimni semestr 2015 - d3s.mff.cuni.cz · Java, zimní semestr 2015 3.11,2015 8 Funkcionální interface kde lze lambda výrazy použít? tam, kde se očekává instance interfacu

Java, zimní semestr 20153.11,2015 17

KomentářeKomentáře● dokumentační komentáře těsně před popisovaný

element

/** Komentar ke tride */public class MyClass { /** Komentar k atributu */ public int a; /** Komentar k metode */ public void foo() { ... }}

Page 18: JAVA, zimni semestr 2015 - d3s.mff.cuni.cz · Java, zimní semestr 2015 3.11,2015 8 Funkcionální interface kde lze lambda výrazy použít? tam, kde se očekává instance interfacu

Java, zimní semestr 20153.11,2015 18

KomentářeKomentáře● jinde jsou ignorovány (jako normální komentáře)

/** ignorovano */import java.util.*;

public class MyClass { void foo() { /** ignorovano */ }}

Page 19: JAVA, zimni semestr 2015 - d3s.mff.cuni.cz · Java, zimní semestr 2015 3.11,2015 8 Funkcionální interface kde lze lambda výrazy použít? tam, kde se očekává instance interfacu

Java, zimní semestr 20153.11,2015 19

Víceřádkové komentářeVíceřádkové komentáře● komentáře typicky přes více řádků● úvodní mezery a hvězdička na dalších řádcích jsou

ignorovány● bez hvězdičky mezery nejsou ignorovány (od 1.3)

/** Tohle je viceradkovy komentar. * Uvodni mezery a hvezdicky * jsou ignorovany a odstraneny. */

/** Zde uvodni mezery ignorovany nejsou – chybi hvezdicka. */

Page 20: JAVA, zimni semestr 2015 - d3s.mff.cuni.cz · Java, zimní semestr 2015 3.11,2015 8 Funkcionální interface kde lze lambda výrazy použít? tam, kde se očekává instance interfacu

Java, zimní semestr 20153.11,2015 20

Sekce komentářůSekce komentářů● dvě sekce v dokumentačních komentářích

– hlavní popis– sekce s tagy

● nejdřív je hlavní popis, pak sekce s tagy– pořadí sekcí nelze prohodit– sekce s tagy začíná prvním tagem (@neco)

/** Hlavni popis elementu. Stale hlavni * popis elementu * @see java.lang.Object */

● komentáře můžou mít pouze jednu sekci

Page 21: JAVA, zimni semestr 2015 - d3s.mff.cuni.cz · Java, zimní semestr 2015 3.11,2015 8 Funkcionální interface kde lze lambda výrazy použít? tam, kde se očekává instance interfacu

Java, zimní semestr 20153.11,2015 21

Druhy tagůDruhy tagů● "block tags"

– @tag– samostatné tagy– můžou stát jen na začátku řádku (úvodní mezery a

hvězdička ignorovány)● znak @ jinde než na začátku řádku je normální znak

● "in-line tags"– {@tag}– můžou stát kdekoliv v textu– i hlavním popisu

@deprecated As of JDK 1.1, replaced by {@link #setBounds(int,int,int,int)}

Page 22: JAVA, zimni semestr 2015 - d3s.mff.cuni.cz · Java, zimní semestr 2015 3.11,2015 8 Funkcionální interface kde lze lambda výrazy použít? tam, kde se očekává instance interfacu

Java, zimní semestr 20153.11,2015 22

KomentářeKomentáře● první věta komentáře = shrnutí

– věta končí první tečkou následovanou bílým znakem (nebo prvním tagem)

– zobrazena ● v přehledu členů třídy (metody, atributy)● v krátkém popisu třídy

● jeden komentář k více atributům/** Komentar patri k obema atributum */public int x, y;

Page 23: JAVA, zimni semestr 2015 - d3s.mff.cuni.cz · Java, zimní semestr 2015 3.11,2015 8 Funkcionální interface kde lze lambda výrazy použít? tam, kde se očekává instance interfacu

Java, zimní semestr 20153.11,2015 23

HTMLHTML● text komentářů – HTML● lze používat HTML tagy

/** Tohle je <b>dokumentacni</b> * komentar */

● znaky < > & zapisovat jako v HTML– < ... &lt;– > ... &gt;– & ... &amp;

● není vhodné používat některé tagy– např. hlavičky <h1> <h2>– naruší strukturu vygenerované dokumentace

Page 24: JAVA, zimni semestr 2015 - d3s.mff.cuni.cz · Java, zimní semestr 2015 3.11,2015 8 Funkcionální interface kde lze lambda výrazy použít? tam, kde se očekává instance interfacu

Java, zimní semestr 20153.11,2015 24

Dědění komentářůDědění komentářů● pokud není komentář definován, dědí se od

nadřazené třídy– u předefinovaných metod– u implementovaných metod z interfaců

● dědí se ta část komentáře, která není definována– platí od 1.4– do 1.3 – přítomnost dokumentačního komentáře

zamezila dědění z předků● explicitní dědění {@inheritDoc}

Page 25: JAVA, zimni semestr 2015 - d3s.mff.cuni.cz · Java, zimní semestr 2015 3.11,2015 8 Funkcionální interface kde lze lambda výrazy použít? tam, kde se očekává instance interfacu

Java, zimní semestr 20153.11,2015 25

Popis balíkuPopis balíku● dokumentační komentář k balíku● soubor package.html● ve stejném adresáři jako třídy● obsahuje HTML stránku● do dokumentace se vloží vše mezi <body> a </body>● píše se bez /** ... */● první věta – krátký popis balíku

● popis skupiny tříd● soubor overview.html● jako package.html

Page 26: JAVA, zimni semestr 2015 - d3s.mff.cuni.cz · Java, zimní semestr 2015 3.11,2015 8 Funkcionální interface kde lze lambda výrazy použít? tam, kde se očekává instance interfacu

Java, zimní semestr 20153.11,2015 26

TagyTagy

Tag Tag1.0 1.0

@{code} 1.5 1.01.3 1.21.0 1.21.0 1.21.4 1.1

{@link} 1.2 1.21.4 {@value} 1.4

{@literal} 1.5 1.01.0

od JDK od JDK@author @return

@see@{docRoot} @serial@deprecated @serialData@exception @serialField{@inheritDoc} @since

@throws{@linkplain}

@version@param

Page 27: JAVA, zimni semestr 2015 - d3s.mff.cuni.cz · Java, zimní semestr 2015 3.11,2015 8 Funkcionální interface kde lze lambda výrazy použít? tam, kde se očekává instance interfacu

Java, zimní semestr 20153.11,2015 27

Tagy u metodTagy u metod

/** Hlavni popis. * @param p1 popis parametru p1 * @param p2 popis parametru p2 * @throws IOException kdy je vyhozena * @throws MyException kdy je vyhozena * @returns co vraci */int foo(int p1, long p2) throws IOException, MyException;

Page 28: JAVA, zimni semestr 2015 - d3s.mff.cuni.cz · Java, zimní semestr 2015 3.11,2015 8 Funkcionální interface kde lze lambda výrazy použít? tam, kde se očekává instance interfacu

Java, zimní semestr 20153.11,2015 28

Další tagyDalší tagy● @since text

– lze použít všude– význam: od jaké verze softwaru daný element existuje– @since 1.4

● @exception– to samé jako @throws

● @author jmeno– jméno tvůrce– použití u třídy, balíku a v přehledu

Page 29: JAVA, zimni semestr 2015 - d3s.mff.cuni.cz · Java, zimní semestr 2015 3.11,2015 8 Funkcionální interface kde lze lambda výrazy použít? tam, kde se očekává instance interfacu

Java, zimní semestr 20153.11,2015 29

Další tagyDalší tagy● @see reference

– "See also" hlavička ve vygenerované dokumentaci– tři formáty– @see "retezec"

● @see "The Java language specification"– @see <a href="URL#value">label</a>– @see package.class#member label

● @see String#equals(Object) equals● @see java.io.File#exists() exists

● {@link package.class#member label}– reference v textu– podobné jako @see

Page 30: JAVA, zimni semestr 2015 - d3s.mff.cuni.cz · Java, zimní semestr 2015 3.11,2015 8 Funkcionální interface kde lze lambda výrazy použít? tam, kde se očekává instance interfacu

Java, zimní semestr 20153.11,2015 30

Další tagyDalší tagy● {@linkplain package.class#member label}

– stejné jako {@link ...}– použije se stejný font jako pro text

● pro {@link ...} se použije jiný font● @deprecated text

– označuje API, které by se už nemělo používat (přetrvává z předchozích verzí)

– text – vysvětlení proč– zpracovává ho i překladač

● varování při použití takového API– od 1.5 – anotace @deprecated

● {@docRoot}– relativní cesta ke kořenovému adresáři vygenerované

dokumentace

Page 31: JAVA, zimni semestr 2015 - d3s.mff.cuni.cz · Java, zimní semestr 2015 3.11,2015 8 Funkcionální interface kde lze lambda výrazy použít? tam, kde se očekává instance interfacu

Java, zimní semestr 20153.11,2015 31

Další tagyDalší tagy● {@literal text}

– text se nebude nijak interpretovat– {@literal a<b>c}

● v dokumentaci bude a<b>c● <b> se nebude interpretovat jako tag

● {@code text}– to samé jako <code>{@literal text}</code>

Page 32: JAVA, zimni semestr 2015 - d3s.mff.cuni.cz · Java, zimní semestr 2015 3.11,2015 8 Funkcionální interface kde lze lambda výrazy použít? tam, kde se očekává instance interfacu

Java, zimní semestr 20153.11,2015 32

javadocjavadoc● vygenerování dokumentace – javadoc

– součást standardní distribuce– spouštění

javadoc [parametry] [baliky] [zdrojove_soubory] [-subpackages pkg1:pkg2:...]

Page 33: JAVA, zimni semestr 2015 - d3s.mff.cuni.cz · Java, zimní semestr 2015 3.11,2015 8 Funkcionální interface kde lze lambda výrazy použít? tam, kde se očekává instance interfacu

Java, zimní semestr 20153.11,2015 33

Parametry pro javadocParametry pro javadoc● -overview cesta/soubor

– jiné umístění pro soubor overview.html● -public

– dokumentace bude obsahovat pouze public elementy● -protected

– dokumentace bude obsahovat public a protected elementy

– implicitní chování● -package

– dokumentace bude obsahovat public, protected a elementy bez označení

● -private– dokumentace bude obsahovat všechny elementy

Page 34: JAVA, zimni semestr 2015 - d3s.mff.cuni.cz · Java, zimní semestr 2015 3.11,2015 8 Funkcionální interface kde lze lambda výrazy použít? tam, kde se očekává instance interfacu

Java, zimní semestr 20153.11,2015 34

Parametry pro javadocParametry pro javadoc● -doclet trida

– doclet generuje dokumentaci– imlicitní doclet generuje HTML

● -source 1.4– pokud se používají assertions (pro JDK 1.4)

● -sourcepath seznam_cest– kde se mají hledat zdrojové soubory

● -verbose -quiet– uroveň výpisů při generování

● -locale jazyk_země_varianta– musí být jako první parametr

● -encoding kodovani– kódování zdrojových souborů

Page 35: JAVA, zimni semestr 2015 - d3s.mff.cuni.cz · Java, zimní semestr 2015 3.11,2015 8 Funkcionální interface kde lze lambda výrazy použít? tam, kde se očekává instance interfacu

Java, zimní semestr 20153.11,2015 35

Parametry pro javadocParametry pro javadoc● -d cesta

– kam vygenerovat dokumentaci● -version

– zahrnout tag @version● -author

– zahrnout tag @author● -windowtitle text● -doctitle text● -header text

– bude na začátku každé stránky● -footer text

– bude na konci každé stránky● -nodeprecated● -nosince

Page 36: JAVA, zimni semestr 2015 - d3s.mff.cuni.cz · Java, zimní semestr 2015 3.11,2015 8 Funkcionální interface kde lze lambda výrazy použít? tam, kde se očekává instance interfacu

Java, zimní semestr 20153.11,2015 36

JAVAJAVA

ANT

Page 37: JAVA, zimni semestr 2015 - d3s.mff.cuni.cz · Java, zimní semestr 2015 3.11,2015 8 Funkcionální interface kde lze lambda výrazy použít? tam, kde se očekává instance interfacu

Java, zimní semestr 20153.11,2015 37

PřehledPřehled● http://ant.apache.org/● nástroj (nejen) na překlad java programů● obdoba make● napsán v Javě● rozšiřitelný

– přidáváním dalších tříd● vstupní soubor (buildfile)

– (obdoba makefile u make)– XML

● NetBeans interně Ant používají pro překlad, spouštění,... projektů

Page 38: JAVA, zimni semestr 2015 - d3s.mff.cuni.cz · Java, zimní semestr 2015 3.11,2015 8 Funkcionální interface kde lze lambda výrazy použít? tam, kde se očekává instance interfacu

Java, zimní semestr 20153.11,2015 38

BuildfileBuildfile● implicitní jméno build.xml● obsahuje jeden project● a alespoň jeden target

<?xml version="1.0" encoding="us-ascii" ?><project ...> <target ...> ... </target> <target ...> ... </target></project>

Page 39: JAVA, zimni semestr 2015 - d3s.mff.cuni.cz · Java, zimní semestr 2015 3.11,2015 8 Funkcionální interface kde lze lambda výrazy použít? tam, kde se očekává instance interfacu

Java, zimní semestr 20153.11,2015 39

ProjectProject● atributy

– name● jméno projektu

– default● implicitní target, který se bude provádět, pokud nebude

žádný explicitně zadán● povinný parametr

– basedir● adresář, od něhož budou všechny cesty v souboru

odvozeny● volitelný element <description>

– popis projektu

<project name="Projekt" default="compile" basedir=".">

<description>Dlouhy popis projektu</description>

Page 40: JAVA, zimni semestr 2015 - d3s.mff.cuni.cz · Java, zimní semestr 2015 3.11,2015 8 Funkcionální interface kde lze lambda výrazy použít? tam, kde se očekává instance interfacu

Java, zimní semestr 20153.11,2015 40

TargetTarget● posloupnost činností (task), které se mají provést● může záviset na jiných targets

– provede se až po těch, na kterých závisí● atributy

– name ● jméno, povinné

– depends● seznam targetů, na kterých závisí

– description● krátký popis

– if● jméno property, která musí být nastavena

– unless● jméno property, která nesmí být nastavena

Page 41: JAVA, zimni semestr 2015 - d3s.mff.cuni.cz · Java, zimní semestr 2015 3.11,2015 8 Funkcionální interface kde lze lambda výrazy použít? tam, kde se očekává instance interfacu

Java, zimní semestr 20153.11,2015 41

TargetTarget<target name="compile" depends="init" description="Prelozi aplikaci"> ....</target>

Page 42: JAVA, zimni semestr 2015 - d3s.mff.cuni.cz · Java, zimní semestr 2015 3.11,2015 8 Funkcionální interface kde lze lambda výrazy použít? tam, kde se očekává instance interfacu

Java, zimní semestr 20153.11,2015 42

TaskTask● kód, který může být vykonán● různý počet parametrů

– podle druhu● vestavěné● volitelné● vlastní

<jmeno atr1="hodnota" atr2="hodnota" .../>

<javac srcdir="..." destdir="..."/>

Page 43: JAVA, zimni semestr 2015 - d3s.mff.cuni.cz · Java, zimní semestr 2015 3.11,2015 8 Funkcionální interface kde lze lambda výrazy použít? tam, kde se očekává instance interfacu

Java, zimní semestr 20153.11,2015 43

PropertyProperty● jméno a hodnota● jména – rozlišování velikosti písmen● získání obsahu property - ${property}● vestavěné property

– basedir– ant.file– ant.version– ant.project.name– ant.java.version– systémové properties Javy

● vlastní property– <property name="jmeno" .... />

Page 44: JAVA, zimni semestr 2015 - d3s.mff.cuni.cz · Java, zimní semestr 2015 3.11,2015 8 Funkcionální interface kde lze lambda výrazy použít? tam, kde se očekává instance interfacu

Java, zimní semestr 20153.11,2015 44

PříkladPříklad<?xml version='1.0' encoding='us-ascii'?><project basedir="." default="compile" name="Project"> <description>Project description</description>

<property name="src" location="src"/> <property name="classes" location="classes"/> <target name="init"> <mkdir dir="${classes}"/> </target>

<target name="compile" depends="init" description="Compile">

<javac debug="true" destdir="${classes}" srcdir="${src}" includes="**/*.java" classpath="${src}" /> </target>

<!-- pokracovani -->

Page 45: JAVA, zimni semestr 2015 - d3s.mff.cuni.cz · Java, zimní semestr 2015 3.11,2015 8 Funkcionální interface kde lze lambda výrazy použít? tam, kde se očekává instance interfacu

Java, zimní semestr 20153.11,2015 45

PříkladPříklad <!-- pokracovani -->

<target name="run" depends="init,compile" description="Execute"> <java fork="true" classname="Main" classpath="${classes}" /> </target>

</project>

Page 46: JAVA, zimni semestr 2015 - d3s.mff.cuni.cz · Java, zimní semestr 2015 3.11,2015 8 Funkcionální interface kde lze lambda výrazy použít? tam, kde se očekává instance interfacu

Java, zimní semestr 20153.11,2015 46

SpouštěníSpouštění● ant [parametry] [target [target2 ... ]]

● parametry-projecthelp, -p

● napověda projektu● popis projektu + popis task

-propertyfile <soubor>● definuje property ze zadaného souboru

-D<property>=<name>● definice property

-buildfile <soubor>-file <soubor>-f <soubor>

● buildfile

Page 47: JAVA, zimni semestr 2015 - d3s.mff.cuni.cz · Java, zimní semestr 2015 3.11,2015 8 Funkcionální interface kde lze lambda výrazy použít? tam, kde se očekává instance interfacu

Java, zimní semestr 20153.11,2015 47

Task javacTask javac● spouští překladač Javy● překládá pouze ty soubory, které jsou potřeba

– k souboru .java není .class nebo je starší– pozor!

● určuje pouze podle jmen souborů● tj. neví o vnitřních třídách apod.

● atributy– srcdir

● adresář s .java soubory● povinný

– destdir● kam ukládat .class soubory

– classpath● CLASSPATH

Page 48: JAVA, zimni semestr 2015 - d3s.mff.cuni.cz · Java, zimní semestr 2015 3.11,2015 8 Funkcionální interface kde lze lambda výrazy použít? tam, kde se očekává instance interfacu

Java, zimní semestr 20153.11,2015 48

Task javacTask javac● atributy

– encoding● kódování

– source● -source parametr pro javac

– compiler● jaký překladač pro Javu se má použít

– fork● true nebo false (implicitně false)● spustit překladač ve stejne JVM jako ant nebo v nové

● srcdir, classpath (a další) můžou být nahrazeny vnořenými elementy <src>, <classpath> (a další)

Page 49: JAVA, zimni semestr 2015 - d3s.mff.cuni.cz · Java, zimní semestr 2015 3.11,2015 8 Funkcionální interface kde lze lambda výrazy použít? tam, kde se očekává instance interfacu

Java, zimní semestr 20153.11,2015 49

Task javaTask java● spustí Java aplikaci● atributy

– classname● třída s metodou main

– jar● jar-soubor ke spuštění

– povinně buď classname nebo jar– classpath– fork

● spustit aplikaci v nové JVM● vnořené elementy

– <arg>● parametry příkazové řádky

Page 50: JAVA, zimni semestr 2015 - d3s.mff.cuni.cz · Java, zimní semestr 2015 3.11,2015 8 Funkcionální interface kde lze lambda výrazy použít? tam, kde se očekává instance interfacu

Java, zimní semestr 20153.11,2015 50

Task propertyTask property● nastaví property na danou hodnotu● nelze měnit jejich hodnotu● atributy

– name● jméno property

– value● hodnota property

– location● absolutní cesta zadaného souboru

– file● soubor, ze kterého se mají načíst property

– url● url, ze kterého se mají načíst property

Page 51: JAVA, zimni semestr 2015 - d3s.mff.cuni.cz · Java, zimní semestr 2015 3.11,2015 8 Funkcionální interface kde lze lambda výrazy použít? tam, kde se očekává instance interfacu

Java, zimní semestr 20153.11,2015 51

Task propertyTask property● příklady

<property name="src" location="src"/><property name="foo.dist" value="dist"/><property file="foo.properties"/><property url="http://...." />

Page 52: JAVA, zimni semestr 2015 - d3s.mff.cuni.cz · Java, zimní semestr 2015 3.11,2015 8 Funkcionální interface kde lze lambda výrazy použít? tam, kde se očekává instance interfacu

Java, zimní semestr 20153.11,2015 52

Task javadocTask javadoc● vytvoří javadoc dokumentaci● atributy

– sourcepath – adresáře se zdrojáky– sourcefiles – přímo vyjmenované zdrojáky– packagenames – pro které balíčku vytvářet– destdir – do jakého adresáře generovat– public, protected,package, private – pro

které elementy se má dokumentace generovat– author – zahrnout tag autor– version – zahrnou tag version– … mnoho dalších

Page 53: JAVA, zimni semestr 2015 - d3s.mff.cuni.cz · Java, zimní semestr 2015 3.11,2015 8 Funkcionální interface kde lze lambda výrazy použít? tam, kde se očekává instance interfacu

Java, zimní semestr 20153.11,2015 53

OstatníOstatní● mnoho dalších tasků

– delete● maže soubory/adresáře

– move● přesun/přejmenování souborů

– mkdir● vytoření adresáře

– copy● kopírování

– echo● vypíše text na standardní výstup

Page 54: JAVA, zimni semestr 2015 - d3s.mff.cuni.cz · Java, zimní semestr 2015 3.11,2015 8 Funkcionální interface kde lze lambda výrazy použít? tam, kde se očekává instance interfacu

Java, zimní semestr 20153.11,2015

JAVAJAVA

Maven

Page 55: JAVA, zimni semestr 2015 - d3s.mff.cuni.cz · Java, zimní semestr 2015 3.11,2015 8 Funkcionální interface kde lze lambda výrazy použít? tam, kde se očekává instance interfacu

Java, zimní semestr 20153.11,2015

PřehledPřehled● http://maven.apache.org/● nástroj pro správu projektů

– „zjednodušeně“ si lze představit jako rozšíření Antu● ale není to rozšíření Antu

● poskytuje– správu závislostí– usnadnění „překládání“ (build) projektů– používání „best practices“– přidávání nových modulů– …

Page 56: JAVA, zimni semestr 2015 - d3s.mff.cuni.cz · Java, zimní semestr 2015 3.11,2015 8 Funkcionální interface kde lze lambda výrazy použít? tam, kde se očekává instance interfacu

Java, zimní semestr 20153.11,2015

PoužíváníPoužívání● vygenerování struktury projektu

mvn archetype:generate -DarchetypeGroupId=org.apache.maven.archetypes -DgroupId=com.mycompany.app -DartifactId=my-app

– archetype ~ šablona projektu

– vygeneruje následující strukturu

Page 57: JAVA, zimni semestr 2015 - d3s.mff.cuni.cz · Java, zimní semestr 2015 3.11,2015 8 Funkcionální interface kde lze lambda výrazy použít? tam, kde se očekává instance interfacu

Java, zimní semestr 20153.11,2015

Struktura projektuStruktura projektu

my-app|-- pom.xml`-- src |-- main | `-- java | `-- com | `-- mycompany | `-- app | `-- App.java `-- test `-- java `-- com `-- mycompany `-- app `-- AppTest.java

Page 58: JAVA, zimni semestr 2015 - d3s.mff.cuni.cz · Java, zimní semestr 2015 3.11,2015 8 Funkcionální interface kde lze lambda výrazy použít? tam, kde se očekává instance interfacu

Java, zimní semestr 20153.11,2015

POM – Project Object ModelPOM – Project Object Model● „definice“ projektu<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>com.mycompany.app</groupId> <artifactId>my-app</artifactId> <packaging>jar</packaging> <version>1.0-SNAPSHOT</version> <name>Maven Quick Start Archetype</name> <url>http://maven.apache.org</url> <dependencies> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>3.8.1</version> <scope>test</scope> </dependency> </dependencies></project>

Page 59: JAVA, zimni semestr 2015 - d3s.mff.cuni.cz · Java, zimní semestr 2015 3.11,2015 8 Funkcionální interface kde lze lambda výrazy použít? tam, kde se očekává instance interfacu

Java, zimní semestr 20153.11,2015

Životní cyklus „buildu“Životní cyklus „buildu“● mvn „fáze“

– vždy se provedou i předchozí fáze

1. process-resources 2. compile 3. process-test-resources 4. test-compile 5. test 6. package 7. install 8. deploy

Page 60: JAVA, zimni semestr 2015 - d3s.mff.cuni.cz · Java, zimní semestr 2015 3.11,2015 8 Funkcionální interface kde lze lambda výrazy použít? tam, kde se očekává instance interfacu

Java, zimní semestr 20153.11,2015 60Tato prezentace podléhá licenci Creative Commons Uveďte autora-Neužívejte komerčně 4.0 Mezinárodní License.

Verze prezentace J05.cz.2015.01