Configuration Maven

De EjnTricks

La configuration de Maven s'effectue à travers les fichiers settings.xml. Cet article présente les options de configurations.


Hand-icon.png Votre avis

Nobody voted on this yet

 You need to enable JavaScript to vote


Study icon.png 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.
 |
 |-->


Folder-icon.png 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>


Folder inspection icon.png 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 :

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>


Command-icon.png 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-icon.png 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

Logo Linux.png 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"

Warning-icon.png 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


Viewer icon.png Voir aussi

Documentation officielle: https://maven.apache.org/settings.html