Configuration Maven : Différence entre versions

De EjnTricks
m
 
Ligne 87 : Ligne 87 :
 
Dans le cadre de cet exemple, [[Nexus]] est hébergé sur la machine <code>192.168.1.32</code> derrière un serveur [[Apache]].
 
Dans le cadre de cet exemple, [[Nexus]] est hébergé sur la machine <code>192.168.1.32</code> derrière un serveur [[Apache]].
  
=== [[File:System-Internet-Search-icon|link=]] Redirection ===
+
=== [[File:System-Internet-Search-icon.png|link=]] Redirection ===
 
la première possibilité consiste à rediriger toutes les demandes sur le serveur <code>Nexus</code> en utilisant la configuration des miroirs. Dans la configuration suivante les accès sur tous les dépôts, valeur <code>*</code> pour la configuration <code>mirrorOf</code>, sont redirigé sur le dépôt <code>public</code> de l'instance <code>Nexus</code>.
 
la première possibilité consiste à rediriger toutes les demandes sur le serveur <code>Nexus</code> en utilisant la configuration des miroirs. Dans la configuration suivante les accès sur tous les dépôts, valeur <code>*</code> pour la configuration <code>mirrorOf</code>, sont redirigé sur le dépôt <code>public</code> de l'instance <code>Nexus</code>.
 
<syntaxhighlight lang="xml">
 
<syntaxhighlight lang="xml">
Ligne 102 : Ligne 102 :
 
'''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 <code>Nexus</code>, et la placer dans le groupe <code>public</code>.
 
'''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 <code>Nexus</code>, et la placer dans le groupe <code>public</code>.
  
=== [[File:Configuration-icon.png|link=]] Configuration par dépôt ====
+
=== [[File:Configuration-icon.png|link=]] 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 <code>central</code>, celui par défaut pour <code>Maven</code>, sur le dépôt <code>public</code> de l'instance <code>Nexus</code>.
 
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 <code>central</code>, celui par défaut pour <code>Maven</code>, sur le dépôt <code>public</code> de l'instance <code>Nexus</code>.
 
<syntaxhighlight lang="xml">
 
<syntaxhighlight lang="xml">

Version actuelle en date du 25 juin 2021 à 13:35

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

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.

System-Internet-Search-icon.png 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-icon.png 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.

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

Icon ACL.png Sécurité

Dans les exemples précédents, le miroir mis en place n'est pas sécurisé. Or il peut être nécessaire de se connecter pour y accéder et cela s'effectue à l'aide de la section servers. Il est possible de spécifier les identifiants de connexion pour chacun des serveurs. L'exemple suivant permet de donner un login / mot de passe pour le serveur avec l'identifiant private-repo, identifiant qui doit être le même que l'identifiant du miroir mis en place, ou du dépôt.

  <servers>
    <!-- server
     | Specifies the authentication information to use when connecting to a particular server, identified by
     | a unique name within the system (referred to by the 'id' attribute below).
     |
     | NOTE: You should either specify username/password OR privateKey/passphrase, since these pairings are
     |       used together.
     |
    <server>
      <id>deploymentRepo</id>
      <username>repouser</username>
      <password>repopwd</password>
    </server>
    -->

    <!-- Another sample, using keys to authenticate.
    <server>
      <id>siteServer</id>
      <privateKey>/path/to/private/key</privateKey>
      <passphrase>optional; leave empty if not used.</passphrase>
    </server>
    -->
    <server>
      <id>private-repo</id>
      <username>my-login</username>
      <password>my-password</password>
    </server>
  </servers>


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