Configuration Maven
La configuration de Maven
s'effectue à travers les fichiers settings.xml
. Cet article présente les options de configurations.
Sommaire
Votre avis
Nobody voted on this yet
|
|
Etude
La documentation officielle de Maven indique qu'il y a deux fichiers de configurations. Le principal settings.xl
se trouve dans le répertoire conf
de l'instance. Les configurations mises en place dans ce fichier vont s'appliquer à tous les utilisateurs.
Chaque utilisateur peut également spécialiser la configuration, en plaçant un fichier settings.xml
dans à l'emplacement ${user.home}/.m2/settings.xml
, où ${user.home}
correspond à l'emplacement "home" de l'utilisateur. Ces emplacements sont généralement sous c:\Users\<USER_NAME>
pour Windows, ou /home/<USER_NAME>
pour Linux.
Les paramètres ne s'appliqueront qu'à l'utilisateur. Beaucoup recommande ce mode de configuration afin de préserver le fichier standard. Mais cela peut être problématique lorsque la machine est partagée par plusieurs utilisateurs, où une installation sur un serveur.
Le contenu du fichier spécifique est identique au standard. COmme indiqué dans celui-ci, le plus simple est de le copier et de n'effectuer que les modifications nécessaires.
<!--
| This is the configuration file for Maven. It can be specified at two levels:
|
| 1. User Level. This settings.xml file provides configuration for a single user,
| and is normally provided in ${user.home}/.m2/settings.xml.
|
| NOTE: This location can be overridden with the CLI option:
|
| -s /path/to/user/settings.xml
|
| 2. Global Level. This settings.xml file provides configuration for all Maven
| users on a machine (assuming they're all using the same Maven
| installation). It's normally provided in
| ${maven.home}/conf/settings.xml.
|
| NOTE: This location can be overridden with the CLI option:
|
| -gs /path/to/global/settings.xml
|
| The sections in this sample file are intended to give you a running start at
| getting the most out of your Maven installation. Where appropriate, the default
| values (values used when the setting is not specified) are provided.
|
|-->
Emplacement dépôt
Maven
télécharge les librairies dans un dépôt local. Par défaut, cet emplacement se situe dans le répertoire ${user.home}/.m2/repository
. Par conséquent, chaque utilisateur d'une plateforme entraîne la création d'un dépôt, qui peut grossir très rapidement. Dans le cas d'une installation sur un serveur d'intégration continue, par exemple, si les applications sont exécutées avec des comptes spécifiques, cela peut entraîner des redondances dans les paquets téléchargés. Mais si le répertoire est commun, il faut s'assurer que les permissions permettent à tous les comptes de créer des fichiers et répertoires.
Il est donc recommander de spécifier ce paramétrage dans le fichier de configuration. Un exemple est fourni en commentaire dans le fichier standard.
<settings xmlns="http://maven.apache.org/SETTINGS/1.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/SETTINGS/1.0.0 http://maven.apache.org/xsd/settings-1.0.0.xsd">
<!-- localRepository
| The path to the local repository maven will use to store artifacts.
|
| Default: ${user.home}/.m2/repository
<localRepository>/path/to/local/repo</localRepository>
-->
.
.
.
</settings>
Un exemple de configuration, sous Windows, peut être le suivant.
<settings xmlns="http://maven.apache.org/SETTINGS/1.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/SETTINGS/1.0.0 http://maven.apache.org/xsd/settings-1.0.0.xsd">
<!-- localRepository
| The path to the local repository maven will use to store artifacts.
|
| Default: ${user.home}/.m2/repository
<localRepository>/path/to/local/repo</localRepository>
-->
<localRepository>C:/Apps/maven/repository</localRepository>
.
.
.
</settings>
Référencement Nexus
Les configurations sont à mettre en place dans le fichier settings.xml
.
Dans le cadre de cet exemple, Nexus est hébergé sur la machine 192.168.1.32
derrière un serveur Apache.
Fichier:System-Internet-Search-icon Redirection
la première possibilité consiste à rediriger toutes les demandes sur le serveur Nexus
en utilisant la configuration des miroirs. Dans la configuration suivante les accès sur tous les dépôts, valeur *
pour la configuration mirrorOf
, sont redirigé sur le dépôt public
de l'instance Nexus
.
<mirrors>
<mirror>
<id>nexus</id>
<mirrorOf>*</mirrorOf>
<name>Local nexus.</name>
<url>http://192.168.1.32/nexus/repository/public</url>
</mirror>
</mirrors>
Cependant, ce type de configuration n'est pas recommandé car les projets peuvent définir leurs propres dépôts et il faut configurer un miroir au niveau de l'instance Nexus
, et la placer dans le groupe public
.
Configuration par dépôt =
Le principe précédent peut être spécialisé pour configurer un miroir par dépôt en fonction de leur identifiant. La configuration suivante permet de spécifier un miroir pour le dépôt central
, celui par défaut pour Maven
, sur le dépôt public
de l'instance Nexus
.
<mirrors>
<mirror>
<id>nexus-central</id>
<mirrorOf>central</mirrorOf>
<name>Local nexus.</name>
<url>http://192.168.1.32/nexus/repository/public</url>
</mirror>
</mirrors>
A noter que l'identifiant nexus-central
n'a aucun lien avec le dépôt central
mis en miroir.
Ce type de configuuration est préféré car cela permet de spécialiser les redirections en fonction des dépôts, et il n'est pas nécessaire de configurer Nexus
dans le cas où un projet spécifie ses propres dépôts.
Utilisation profiles
Les profiles peuvent également être utilisés pour configurer les redirections. Ce mode est un peu complexe mais pas forcément le plus pratique. Dans un premier temps, un miroir est configuré pour rediriger toutes les demandes vers l'instance Nexus
, comme expliquer précédemment.
<mirrors>
<mirror>
<id>nexus</id>
<mirrorOf>*</mirrorOf>
<name>Local nexus.</name>
<url>http://192.168.1.32/nexus/repository/public</url>
</mirror>
</mirrors>
Puis un profile nexus
est mis en place pour redéfinir le dépôt avec l'identifiant central
, pour les artéfacts et les plugins.
<profiles>
<profile>
<id>nexus</id>
<!-- Enable snapshots for the built in central repo to direct -->
<!-- all requests to nexus via the mirror -->
<repositories>
<repository>
<id>central</id>
<url>http://central</url>
<releases><enabled>true</enabled></releases>
<snapshots><enabled>true</enabled></snapshots>
</repository>
</repositories>
<pluginRepositories>
<pluginRepository>
<id>central</id>
<url>http://central</url>
<releases><enabled>true</enabled></releases>
<snapshots><enabled>true</enabled></snapshots>
</pluginRepository>
</pluginRepositories>
</profile>
</profiles>
Dans cette configuration un peu particulière, une URL "bidon" est mise en place pour le dépôt avec l'identifiant central
. Il n'est pas nécessaire que celle-ci soit correcte, car elle sera surchargée par la configuration du miroir.
Enfin, il faut forcer l'activation de ce profile.
<activeProfiles>
<!-- make the profile active all the time -->
<activeProfile>nexus</activeProfile>
</activeProfiles>
Personnalisation
Comme pour le fichier settings.xml
, il est possible de positionner des variables d'environnement lors de l'exécution de Maven. Ainsi, chaque utilisateur d'une plateforme peut spécifier son propre environnement d'exécution, comme la gestion de la mémoire ou l'emplacement de la JDK. Dans les paragraphes suivants, les exemples sont sur une version 3.3.9.
Windows
Pour une plateforme Windows, le script d'exécution mvn.cmd
exécute les commandes suivantes.
@REM set %HOME% to equivalent of $HOME
if "%HOME%" == "" (set "HOME=%HOMEDRIVE%%HOMEPATH%")
@REM Execute a user defined script before this one
if not "%MAVEN_SKIP_RC%" == "" goto skipRcPre
@REM check for pre script, once with legacy .bat ending and once with .cmd ending
if exist "%HOME%\mavenrc_pre.bat" call "%HOME%\mavenrc_pre.bat"
if exist "%HOME%\mavenrc_pre.cmd" call "%HOME%\mavenrc_pre.cmd"
:skipRcPre
La première exécution permet de positionner la variable d'environnement HOME
qui correspond au répertoire home de l'utilisateur. Pour l'utilisateur user1
, cela sera généralement c:/users/user1
.
Puis, le fichier mavenrc_pre.bat
est recherché dans ce répertoire, afin d'être exécuté si il existe. Il en est de même pour le fichier mavenrc_pre.cmd
. Ainsi, il est possible de spécialiser le contexte d'exécution.
Le script mavenrc_pre.cmd
suivant permet de spécifier l'emplacement de la JDK ainsi que des options de mémoires.
set JAVA_HOME="C:\Apps\Java\jdk1.8.0_45"
set MAVEN_OPTS=-Xms1024m -Xmx1024m -XX:NewSize=256m -XX:MaxNewSize=256m
Linux
Pour une plateforme Linux, le script d'exécution mvn
exécute les commandes suivantes.
if [ -z "$MAVEN_SKIP_RC" ] ; then
if [ -f /etc/mavenrc ] ; then
. /etc/mavenrc
fi
if [ -f "$HOME/.mavenrc" ] ; then
. "$HOME/.mavenrc"
fi
fi
Si le fichier </code>/etc/mavenrc</code> existe, celui-ci est exécuté. Il en est de même avec le fichier $HOME/.mavenrc
, où $HOME
est l'emplacement du répertoire HOME de l'utilisateur.
Le script .mavenrc
suivant permet de spécifier l'emplacement de la JDK ainsi que des options de mémoires. A noter que ce script est mis en place sur une plateforme Windows, mais l'exécution est réalisée à travers Git Bahs
qui utilise les commandes bash Linux.
export JAVA_HOME="c:/Apps/Java/jdk1.8.0_45"
export MAVEN_OPTS="-Xms1024m -Xmx1024m -XX:NewSize=256m -XX:MaxNewSize=256m"
Emplacement Home
Maven nécessite la variable d'environnement M2_HOME
afin d'identifier l'emplacement des binaires. Cependant, il n'est pas nécessaire de la configurer en cas d'utilisation par défaut. En effet, celle-ci est renseignée lors du script d'exécution.
Dans le cas de Windows, les commandes suivantes positionnent la valeur.
:stripMHome
if not "_%M2_HOME:~-1%"=="_\" goto checkMCmd
set "M2_HOME=%M2_HOME:~0,-1%"
goto stripMHome
Dans le cas de "Linux", les commandes suivantes positionnent la valeur.
if [ -z "$M2_HOME" ] ; then
## resolve links - $0 may be a link to maven's home
PRG="$0"
# need this for relative symlinks
while [ -h "$PRG" ] ; do
ls=`ls -ld "$PRG"`
link=`expr "$ls" : '.*-> \(.*\)$'`
if expr "$link" : '/.*' > /dev/null; then
PRG="$link"
else
PRG="`dirname "$PRG"`/$link"
fi
done
saveddir=`pwd`
M2_HOME=`dirname "$PRG"`/..
# make it fully qualified
M2_HOME=`cd "$M2_HOME" && pwd`
cd "$saveddir"
# echo Using m2 at $M2_HOME
fi
Voir aussi
Documentation officielle: https://maven.apache.org/settings.html