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
Version 2.X
Par défaut, Maven nécessite un accès internet afin de télécharger les librairies. Cependant les accès ne sont pas disponibles, cas de développement chez un client, et des gestionnaires de dépôt comme Nexus, qui est pris en exemple ici.
Afin d'utiliser le serveur Nexus mis en place, il faut ajouter un mirroir dans le fichier de configuration. Par défaut, toutes les demandes passeront par ce serveur. Au niveau du noeud mirrors
, une configuration est ajoutée ainsi, comme décrit sur le site de Nexus :
- https://support.sonatype.com/entries/20943003-Configure-Maven-to-Download-from-Nexus
- http://books.sonatype.com/nexus-book/reference/config-maven.html
Dans le cadre de cet exemple, Nexus est hébergé sur la machine 192.168.1.32
derrière un serveur Apache.
Il faut configurer :
- Un nouveau mirroir qui servira toutes les demandes;
- Un profile avec une URL quelconque qui sera surchargée par le mirroir;
- Activation du profile.
Ainsi toutes les demandes seront dirigés vers le serveur Nexus.
<mirrors>
<mirror>
<id>nexus</id>
<mirrorOf>*</mirrorOf>
<name>Local nexus.</name>
<url>http://192.168.1.32/nexus/content/groups/public</url>
</mirror>
</mirrors>
<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>
<activeProfiles>
<!-- make the profile active all the time -->
<activeProfile>nexus</activeProfile>
</activeProfiles>
Version 3.X
Suite à l' installation version 3.X de Nexus, la configuration de Maven doit être modifiée car l'URL d'accès change. L'URL relatie devient repository/public
et le fichier est modifiée ainsi.
<mirrors>
<mirror>
<id>nexus</id>
<mirrorOf>*</mirrorOf>
<name>Local nexus.</name>
<!--
<url>http://192.168.1.32/nexus/content/groups/public</url>
-->
<url>http://192.168.1.32/nexus/repository/public</url>
</mirror>
</mirrors>
<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>
<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