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

  • Zde: https://maven.apache.org/download.cgi

  • 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