Apache Maven
Apache Maven je nástroj pro správu, řízení a automatizaci buildů aplikací. Ačkoliv je možné použít tento nástroj pro projekty psané v různých programovacích jazycích, podporován je především jazyk Java.
Vývojář | Apache Software Foundation |
---|---|
První vydání | 30. března 2002 |
Aktuální verze | 3.8.1 (4. dubna 2021) |
Operační systém | multiplatformní |
Platforma | Java Virtual Machine |
Vyvíjeno v | Java |
Typ softwaru | Build tool |
Licence | Apache Licence 2.0 |
Web | http://maven.apache.org |
Některá data mohou pocházet z datové položky. |
Název maven pochází z jidiš a znamená „znalec“.[1] Maven byl vytvořen jako nástroj pro zjednodušení buildů pro projekt Jakarta Turbine. Hlavním impulzem pro vznik byla snaha o standardizaci a znovupoužitelnost buildovacích skriptů, která v tehdy používaném nástroji Apache Ant nebyla plně podporována.[2]
Cíle aplikace
Maven je navržen pro usnadnění práce při buildování aplikací a agendou s tím spojenou. Jeho tvůrci určili pět oblastí, které by měl Maven pokrývat.
- Usnadnění procesu buildování,
- jednotný systém buildování,
- poskytování kvalitních informací o projektu,
- poskytování direktiv pro „best practices“,
- poskytnutí transparentního přidávání nových funkcí.
Struktura aplikace
Základním principem fungování Mavenu je popsání projektu pomocí Project Object Model. Tento model popisuje softwarový projekt nejen z pohledu jeho zdrojového kódu, ale včetně závislostí na externích knihovnách, popisu procesu buildování a různých funkcí s tím spojených (jako je spouštění testů, sbírání informací o zdrojových kódech a podobně).
Maven sám je postaven na modulární architektuře a funguje na principu volání jednotlivých pluginů. Maven sám pouze obstarává dodání a spuštění nadefinovaných pluginů. Maven nemá žádné vlastní grafické uživatelské rozhraní a běží pouze na příkazové řádce a pluginy tak mohou využívat všechny nástroje, které dokáží komunikovat pomocí standardních vstupů.
Výchozí nastavení Mavenu vyžaduje následující adresářovou strukturu:
Adresář | Popis |
---|---|
Kořenový adresář | obsahuje pom.xml ostatní adresáře |
src/main/java | obsahuje kompilovatelné .java soubory |
src/main/resources | obsahuje další soubory, například konfigurační XML |
src/test/java | obsahuje třídy testů |
src/test/resources | obsahuje konfigurační soubory pro testy |
Ačkoliv je tato struktura obecně doporučována, je možné ji změnit pomocí konfigurace v pom.xml
Project Object Model
Project Object Model je koncept popisu projektu jako objektu. Za tímto účelem je definovaná jednoduchá XML struktura, která definuje jednotlivé části projektu a jeho závislosti na externích knihovnách a nástrojích. Současně je možné definovat konstanty, které pak mohou využít jednotlivé pluginy. Tento XML dokument se nachází v kořenovém adresáři projektu a je pojmenován pom.xml
. Pokud je projekt složen z více dílčích projektů nebo modulů, každý z nich má pak svůj vlastní pom.xml soubor, který dědí vlastnosti od nadřazeného souboru a může přidávat další položky. Díky této struktuře je pak možné sestavit celý projekt jediným příkazem.
Minimální kostra pom.xml může být například následující:
<project>
<modelVersion>4.0.0</modelVersion>
<!-- identifikátory projektu -->
<groupId>com.mycompany.app</groupId>
<artifactId>my-app</artifactId>
<version>1.0</version>
<!-- závislosti na externích knihovnách -->
<dependencies>
<dependency>
<!-- upřesnění konkrétní knihovny -->
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>3.8.1</version>
<!-- definice oblasti použití knihovny -->
<scope>test</scope>
</dependency>
</dependencies>
</project>
Takovýto projekt může pak být kompilován a mohou být na něm spouštěny JUnit testy. Maven sám se postará o dodání potřebných knihoven.
Pluginy
Všechny pluginy jsou volány jednoduchým příkazem mvn [název_pluginu]:[goal]
. Goal je prakticky označení funkce pluginu, která je volána.
Příkladem takového příkazu může být kompilace projektu:[3] mvn compiler:compile
Jelikož při sestavování aplikace je obvykle voláno více takovýchto pluginů, bylo by nepraktické volat každý samostatně. Z tohoto důvodu Maven definuje Build Lifecycle (životní cyklus buildu). Každý plugin pak může být asociován s některou z těchto fází.
Build LifeCycle
Maven umožňuje rozdělit proces buildu do více fází. Tento přístup umožňuje nejen automaticky spouštět pluginy, ale také specifikovat fázi, ve které má Maven skončit. Například nám během vývoje stačí zkompilovat zdrojové kódy a otestovat je bez deploye aplikace na server.
Výchozí cyklus maven je nastaven takto:
- process-resources
- compile
- process-test-resources
- test-compile
- test
- package
- install
- deploy
Dependencies
V pom.xml je možné u každého projektu nadefinovat jeho závislosti na externích knihovnách. Jednotlivé prvky Artifacts jsou jednoznačně definovány podle atributů <groupId> a <artifactId>. Maven pak automaticky vyhledá a nainstaluje potřebné knihovny. Samotné vyhledávání probíhá v definovaných úložištích (repository). Kromě globální maven repository,[4] která je veřejně přístupná, je možné založit i další soukromá nebo firemní úložiště.
Reference
- http://maven.apache.org/what-is-maven.html
- http://maven.apache.org
- Maven Compiler Plugin
- Maven 2 Central Repository. repo1.maven.org [online]. [cit. 2010-06-24]. Dostupné v archivu pořízeném dne 2018-09-17.