Maven
Co to je?
- nástroj pro správu a sestavování aplikací
- konfiguruje se v souboru pom.xml
- závislosti se hledají v "repozitářích"
Závislosti
- jsou další artefakty které projekt potřebuje ke kompilaci nebo běhu
- každý artefakt je určen pomocí groupId a artifactId
- mají definovaný scope, který určuje míru a okamžik potřeby
<dependency>
<groupId>somegroup</groupId>
<artifactId>someartifact</artifactId>
<version>1.0</version>
<scope>provided</scope>
</dependency>
Závislosti - scope
- compile - defaultní, vyžadován při kompilaci i běhu
- test - vyžadován pro kompilaci a spuštění unit testů
- runtime - potřeba jen při běhu(např. implementace API)
- provided - potřeba pro kompilaci i běh, ale je poskytnut JVM za běhu
- system - jako provided, ale musíme určit místo artefaktu
Závislosti -verze
- verze závislostí se dají ve vícemodulových projektech řídit jednotně z předka
<dependencyManagement>
<dependency>
<groupId>somegroup</groupId>
<artifactId>someartifact</artifactId>
<version>1.0</version>
<scope>provided</scope>
</dependency>
</dependencyManagement>
<dependency>
<groupId>somegroup</groupId>
<artifactId>someartifact</artifactId>
<!-- není nutné specifikovat verzi -->
</dependency>
Závislosti -výjimky
- pokud artefakt má transitivní závislost, můžeme ji potlačit
<dependency>
<groupId>sample.ProjectA</groupId>
<artifactId>Project-A</artifactId>
<version>1.0</version>
<scope>compile</scope>
<exclusions>
<exclusion> <!-- declare the exclusion here -->
<groupId>sample.ProjectB</groupId>
<artifactId>Project-B</artifactId>
</exclusion>
</exclusions>
</dependency>
Příklad pom.xml
<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>cz.voho</groupId>
<artifactId>myproject</artifactId>
<version>1.0.0-SNAPSHOT</version>
<packaging>jar</packaging>
<name>My Project</name>
<description>Sample project with a dependency</description>
<url>http://someproject.com/</url>
<dependencies>
<dependency>
<groupId>com.company</groupId>
<artifactId>somelibrary</artifactId>
<version>1.2.3</version>
</dependency>
</dependencies>
</project>
Příklad pom.xml
<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>cz.voho</groupId>
<artifactId>myproject</artifactId>
<version>1.0.0-SNAPSHOT</version>
<packaging>pom</packaging>
<name>My Project</name>
<description>Sample parent project with modules</description>
<url>http://someproject.com/</url>
<modules>
<module>module1</module>
<module>module2</module>
<module>module3</module>
</modules>
</project>
build lifecycle
- definovaná posloupnost fází:
- clean - maže dočasné soubory
- default - provede sestavení projektu
- site - vytváří reporty, dokumentace, deploy...
- každá fáze obsahuje jeden nebo více úkolů(goal)
goals
- clean - smaže vybuilděný adresář target
- install - vytvoří build aplikace a instaluje ho do lokálního repository
- test - spustí testy
- https://maven.apache.org/guides/introduction/introduction-to-the-lifecycle.html#Lifecycle_Reference
instalace
-
Nastavení enviroments variables(pro Win):
-
M2=maven-path\bin
-
M2_HOME=maven-path
-
do path přidat cestu k mvn (maven-path\bin)
-
-
Test že je vše ok – otevřete terminal a napište mvn –version.
Apache Maven 3.2.5 (12a6b3acb947671f09b81f49094c53f426d8cea1; 2014-12-14T18:29:23+01:00)
Maven home: /usr/local/Cellar/maven/3.2.5/libexec
Java version: 1.6.0_65, vendor: Apple Inc.
Java home: /Library/Java/JavaVirtualMachines/1.6.0.jdk/Contents/Home
Default locale: cs_CZ, platform encoding: MacCentralEurope
OS name: "mac os x", version: "10.11.2", arch: "x86_64", family: "mac"
Spouštění
- spouští se příkazem mvn [goal] [parameter]
- parametry:
- -DskipTests=true : nespouští testy
- -X : debug režim=podrobný výpis
- -U : aktualizuje snaphosty
Maven
By Jiří Čížek
Maven
- 307