Seminář 10
Obsah
- Balíčky
- Moduly
- Sestavení projektu
Balíčky
- jmenné prostory v Javě,
- (skoro) každý soubor s kódem začíná
package ...
, - něco jako
package cz.upol.jj1.lecture10;
nebopackage java.util;
, - existuje default package (když nespecifikujete package v hlavičce souboru),
- zajišťují modularitu Java projektů:
- zabraňují kolizi jmen,
- umožňují členit kód do souvisejících celků,
- umožňují vytvářet a používat rozumně strukturované knihovny,
- …
Struktura balíčku
- balíček obsahuje vše potřebné pro práci s danou funkcionalitou
- balíčky ve formě JAR archivů (zip s danou strukturou; *.jar)
- zkompilované kódy (v Javě *.class soubory)
- meta informace:
- tzv. manifest soubor
- cesta
META-INF/MANIFEST.MF
- záznamy tvaru
klíč: hodnota
- př.:
Main-Class: cz.upol.jj1.lecture10.Main
- př.:
Class-Path: knihovna.jar
- více v dokumentaci
- volitelně: další potřebné zdroje, zdrojové kódy, …
- dokumentace k JAR souborům
Základní práce s JAR soubory
- Pro práci s JAR a kódem má JDK více nástrojů:
- java - interpret Java bytecode
- javac - kompilátor (z .java do .class)
- jar - práce s JAR soubory
- …
jar cf jar-file input-file(s)
- vytvoří JARjar-file
ze souborůinput-file(s)
jar tf jar-file
- zobrazí obsah JARjar-file
jar xf jar-file
- rozbalí obsah JARjar-file
java -jar app.jar
- spustí aplikaci z JARapp.jar
(musí to být spustitelný JAR s Main-Class v manifestu)- Více v dokumentaci.
Moduly
- distribuce knihoven v podobě balíčků má své problémy
- výrazně rozšířeno v Java 9 - moduly (klíčová slova: java module, project jigsaw)
- vše zpětně kompatibilní (jako vždy v Javě)
- umožňují například specifikovat, co modul nabízí světu a co od něj požaduje (API)
- umožňují toho mnohem více (jsou knihy jen o modulech v Javě)
- přehledový článek
Teď už jste teoreticky schopni svůj kód kompilovat a distribuovat v podobě JAR archivů, nicméně běžně to člověk ručně nedělá.
(Nejen) balíčkovací nástroje
- je jich více
- nejznámější trojice: Ant, Maven, Gradle
- ukážeme si ant (pohodlný pro menší projekty, nejjednodušší)
- doporučuji alespoň podívat se i na ostatní
Ant
- “lepší make”
- Ukázka knihovny
- Ukázka aplikace
- zdroje:
Maven a Gradle
- Maven
- reakce na nepříjemné vlastnosti Antu
- zavádí konvence pro sestavování SW
- XML konfigurace
- repositáře, pluginy, wrapper, …
- Gradle
- reakce na nepříjemné vlastnosti předchozích
- skripty v Groovy (.gradle) nebo v Kotlinu (.gradle.kts)
- repositáře, pluginy, wrapper, …
- mocný nástroj
- existují i jiné balíčkovací nástroje nad JVM