dimanche 18 octobre 2015

MAVEN en 5 minutes

Pré-requis

Être à l'aise dans la manipulation et l'installation de logiciel dans le système de votre choix. Dans cet article nous utilisons UBUNTU

Installation

Installer MAVEN sur votre système. Par exemple pour UBUNTU "sudo apt-get install  maven". Maven utilise Java (java doit donc être installé aussi)

Si vous souhaiter utiliser la dernière version de maven, et c'est ce que nous vous conseillons, choisissez l'installation "manuelle¨

Télécharger la dernière version ici
Décompresser l'archive dans /opt par exemple
Ajouter le répertoire bin de maven au PATH du système.

Dans notre environnement nous avons ajouté "export PATH=$PATH:/opt/apache-maven-3.3.3/bin/" a la fin du fichier .bashrc

Ouvrir un nouveau terminal et Verifier l'installation 
mvn --version
Apache Maven 3.3.3 (7994120775791599e205a5524ec3e0dfe41d4a06; 2015-04-22T14:57:37+03:00)
Maven home: /opt/apache-maven-3.3.3
Java version: 1.7.0_79, vendor: Oracle Corporation
Java home: /usr/lib/jvm/java-7-openjdk-amd64/jre
Default locale: fr_FR, platform encoding: UTF-8
OS name: "linux", version: "3.19.0-30-generic", arch: "amd64", family: "unix"

Création du premier projet

Voici la commande magique

mvn archetype:generate -DgroupId=net.cofares.app -DartifactId=tuto-app -DarchetypeArtifactId=maven-archetype-quickstart -DinteractiveMode=false

La première fois, la commande prendra un certain temps, maven va récupérer pour vous, automatiquement, tous les composants (artifact) nécéssaire pour le projet. Ces artifact par la suite serons dans votre dépôt (cache) local. Bien sûe vous avez besoin d'une connection internet lors de l'exécution de cette commande la première fois.

Après un certain nombre de "download" et de configuration automatique. Le projet est prêt. Verifions:

Trace sans les DONLOAD
mvn archetype:generate -DgroupId=net.cofares.tuto -DartifactId=appNo1 -DarchetypeArtifactId=maven-archetype-quickstart -DinteractiveMode=false
[INFO] Scanning for projects...
[INFO]                                                                        
[INFO] ------------------------------------------------------------------------
[INFO] Building Maven Stub Project (No POM) 1
[INFO] ------------------------------------------------------------------------
[INFO]
[INFO] >>> maven-archetype-plugin:2.4:generate (default-cli) > generate-sources @ standalone-pom >>>
[INFO]
[INFO] <<< maven-archetype-plugin:2.4:generate (default-cli) < generate-sources @ standalone-pom <<<
[INFO]
[INFO] --- maven-archetype-plugin:2.4:generate (default-cli) @ standalone-pom ---
[INFO] Generating project in Batch mode
[INFO] ----------------------------------------------------------------------------
[INFO] Using following parameters for creating project from Old (1.x) Archetype: maven-archetype-quickstart:1.0
[INFO] ----------------------------------------------------------------------------
[INFO] Parameter: groupId, Value: net.cofares.tuto
[INFO] Parameter: packageName, Value: net.cofares.tuto
[INFO] Parameter: package, Value: net.cofares.tuto
[INFO] Parameter: artifactId, Value: appNo1
[INFO] Parameter: basedir, Value: /home/pascalfares
[INFO] Parameter: version, Value: 1.0-SNAPSHOT
[INFO] project created from Old (1.x) Archetype in dir: /home/pascalfares/appNo1
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 9.397 s
[INFO] Finished at: 2015-10-18T10:31:03+03:00
[INFO] Final Memory: 17M/158M
[INFO] ------------------------------------------------------------------------

et voici ce qui a été créé

cd appNo1/
pascalfares@Sleekbook:~/appNo1$ ls
pom.xml  src
pascalfares@Sleekbook:~/appNo1$ ls -R
.:
pom.xml  src
./src:
main  test
./src/main:
java
./src/main/java:
net
./src/main/java/net:
cofares
./src/main/java/net/cofares:
tuto
./src/main/java/net/cofares/tuto:
App.java
./src/test:
java
./src/test/java:
net
./src/test/java/net:
cofares
./src/test/java/net/cofares:
tuto
./src/test/java/net/cofares/tuto:
AppTest.java

Le répertoire  /src/main/java contient le code source du projet, le répertoire src/test/java contient la source de test, et le fichier pom.xml est le "Project Object Model", ou POM du projet.

Le POM 

Le pom est le fichier essentiel d'un projet MAVEN voici le fichier pom de notre projet
more 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/
maven-v4_0_0.xsd">
  <modelVersion>4.0.0</modelVersion>
  <groupId>net.cofares.tuto</groupId>
  <artifactId>appNo1</artifactId>
  <packaging>jar</packaging>
  <version>1.0-SNAPSHOT</version>
  <name>appNo1</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>

Qu'avons nous fait? 

Vous avez exécuté le but (objectf) archetype:generate, et passé différents paramètres à cet objectif. Le préfixe archetype est le 'plugin' qui contient l'objectif. Si vous êtes familier avec Ant, vous pouvez concevoir cela comme similaire à une tâche. Ce but a créé un projet simple basée sur un archétype. Qu'il suffise de considérer pour l'instant qu'un 'plugin' est une collection de buts avec un but commun général.

Construisons maintenant le résultat (générer l'executable)

mvn package

Cette fois ci nous exécutons une phase de packaging, qui va produire le logiciel au format de packaging correspondant au archetype de notre projet.

Une phase est une étape dans le cycle de vie de la construction, qui est une séquence ordonnée de phases. Lorsqu'une phase est donnée, Maven exécute toutes les étapes dans l'ordre jusqu'à et y compris celle définie.

Le logiciel est prêt essayons le :

java -cp target/appNo1-1.0-SNAPSHOT.jar net.cofares.tuto.App
Hello LJUG!