mercredi 16 mars 2011

Software : Mise en place de MAVEN dans le cadre du projet







Avec Java et ses milliers de librairies (.jar) disponibles sur le net, il devient vite fastidieux de télécharger sur divers sites les .jar et de les assembler dans le classpath.
Cela survient généralement lorsqu'on partage un projet, effectivement, on récupère le code source du projet et on s'aperçoit rapidement que des dépendances sont manquantes.
Pire encore, on télécharge une librairie et celle ci est dépendante d'une autre (Insupportable).

Du coup est arrivé MAVEN (dépot de librairies jar), on pourrait assimiler ça à serveur de dépot Linux (apt-get xxx ou rpm -install ....). 
Pour spécifier les librairies à utiliser, on aura juste à créer un fichier pom.xml au sein de notre projet et d'y spécifier à l'aide de balises <dependency> les dependances nécessaires au bon fonctionnement du projet.

Plus d'informations sur le site Maven d'Apache. Bien entendu, Maven ne fait pas que cela, une multitude de plugins, goals sont disponibles.

Donc conclusion voici le fichier pom.xml de notre projet, où pour l'instant nous tirons quelques dépendances

Comme SpringFramework permettant de faire de l'injection (En Vert)
Comme Hibernate notre ORM (En rouge)
Comme Log4j notre loggeur préféré (En bleu)
Comme le runtime Apache (pour notre serveur d'appli) (En mauve)
Comme le driver JDBC Mysql pour atteindre notre base (En orange)

La partie Build permettra de construire notre fichier WAR qui sera déployé sur notre Serveur Tomcat.

Le fichier se trouve à la racine de notre projet : 



Voici son contenu : 

<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>HomeAutomateCore</groupId>
<artifactId>HomeAutomateCore</artifactId>
<packaging>war</packaging>
<name>Coeur HomeAutomate</name>
<version>1.0</version>
<dependencies>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring</artifactId>
<version>2.5.6</version>
<optional>false</optional>
</dependency>


<dependency>
<groupId>org.freemarker</groupId>
<artifactId>freemarker</artifactId>
<version>2.3.16</version>
<scope>provided</scope>
</dependency>


<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate</artifactId>
<version>3.1.3</version>
</dependency>


<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
<version>1.2.16</version>
</dependency>


<dependency>
<groupId>org.apache.tomcat</groupId>
<artifactId>servlet-api</artifactId>
<version>6.0.29</version>
</dependency>


<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.14</version>
</dependency>


</dependencies>


<build>
<directory>target</directory>
<outputDirectory>target/classes</outputDirectory>


<testOutputDirectory>target/test-classes</testOutputDirectory>
<sourceDirectory>src</sourceDirectory>
<testSourceDirectory>test</testSourceDirectory>
<resources>
<resource>


<directory>resource</directory>
</resource>
</resources>
<testResources>
<testResource>
<directory>testresource</directory>
</testResource>
</testResources>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-war-plugin</artifactId>
<version>2.1.1</version>
<configuration>
<warSourceDirectory>${basedir}/WebContent</warSourceDirectory>
<attachClasses>true</attachClasses>


<archive>


<manifest>


<addClasspath>false</addClasspath>
</manifest>
</archive>
</configuration>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<configuration>


<source>1.5</source>
<target>1.5</target>
</configuration>


</plugin>
</plugins>


</build>
</project>




Une fois le fichier pom déposé, il faut maintenant exécuter une commande MAVEN qui va interpréter le fichier pom et commencer à récupérer les librairies manquante et compiler le projet. Pour cela on passe dans le menu External Tool Configuration d'Eclipse (Au passage je vous conseille d'installer le plugin MAVEN dans Eclipse par le menu updates Software du menu Help).


On lancera donc la commande mvn.bat (Après avoir téléchargé maven)
puis en paramètre les goals suivants : 

            clean validate install eclipse:eclipse compile war:inplace

Je vous laisse consulter le site maven pour le détail de chaque Goal, juste 2 infos : eclipse:eclipse permet d'intégrer les modifications dans l'IDE Eclipse (Classpath) et war:inplace permet de recopier les lib téléchargées dans le répertoire WEB-INF/LIB.

Capture d'écran :


Après avoir cliqué sur Run, Maven va télécharger du dépot les librairies nécessaires et les placer dans un cache local (variable M2_REPO).

Je constate maintenant que mes librairies sont référencées depuis le M2_REPO :


Et vouala.

Aucun commentaire:

Enregistrer un commentaire