Installation Maven Windows

De EjnTricks

Les principes de Maven décrit pour Ubuntu restent valables dans le cadre de Windows. L'installation de Maven s'effectue en copiant simplement les binaires et après quelques configurations des variables d'environnement.


Hand-icon.png Votre avis

Nobody voted on this yet

 You need to enable JavaScript to vote


System-Install-icon.png Installation

Le contenu du tar apache-maven-2.2.1-bin.tar.gz est placé dans un répertoire par exemple C:\APPS\maven.


Icon-database.png Création repository

Le repository est créé dans le repertoire repository sous C:\APPS\maven.


Configuration-icon.png Configuration

La configuration de l'instance s'effectue en modifiant le fichier settings.xml global ou spécifique à l'utilisateur, comme explicité dans l'article de configuration.

L'emplacement de ce repository doit etre configuré au niveau de Maven dans le fichier settings.xml.

  <!-- 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>

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.5 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.5/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>


Icon-Configuration-Settings.png Variable d'environnement

L'utilisation de Maven nécessite des variables d'environnement afin de pouvoir l'exécuter en ligne de commande. Les variables nécessaires sont:

  • M2_HOME: C:\APPS\maven, optionel;
  • Path: Ajouter %M2_HOME%\bin.


Examples-icon.png Configuration script de démarrage

Les scripts de Maven sont particulièrement bien organisés et offrent de grandes possibilités de configurations. Cependant il est primordiale de les étudier afin de bien comprendre les fonctionnement mis en place.

Comme dans le cas de la mise en place de Tomcat, il peut être souhaité de ne pas interagir avec les variables d'environnement du poste en les gérant à la volée. ce qui permet de configurer une version de la JRE / JDK spécifique pour une installation de Maven.

En étudiant le script mvn.bat, il est constaté qu'un script mavenrc_pre.bat est exécuté si trouvé. Celui-ci permet donc de mettre en place des variables d'environnement spécifiques.

@REM Begin all REM lines with '@' in case MAVEN_BATCH_ECHO is 'on'
@echo off
@REM enable echoing my setting MAVEN_BATCH_ECHO to 'on'
@if "%MAVEN_BATCH_ECHO%" == "on"  echo %MAVEN_BATCH_ECHO%

@REM set %HOME% to equivalent of $HOME
if "%HOME%" == "" (set "HOME=%HOMEDRIVE%%HOMEPATH%")

@REM Execute a user defined script before this one
if exist "%HOME%\mavenrc_pre.bat" call "%HOME%\mavenrc_pre.bat"

Cependant, ce fichier est recherché à l'emplacement %HOMEDRIVE%%HOMEPATH%\mavenrc_pre.bat, si la variable HOME n'est pas disponible. Dans le cadre de cette installation, les variables sont résolues ainsi.

C:\temp>echo %HOMEDRIVE%
C:

C:\temp>echo %HOMEPATH%
\Users\etienne

Par conséquent, le système n'est pas totalement opérationel car il va dépendre de l'utilisateur connecté. Une petite modification du script va permettre de charger le script mavenrc_pre.bat placé dans le répertoire bin de l'instance Maven. Pour cela, il suffit de modifier la définition de la variable HOME avec un principe repris depuis les script de démarrage de Tomcat. La première instructions set "HOME=%~dp0" permet de récupérer le répertoire du script exécuté, soit mvn.bat. Dans le cadre de cette installation, la variable HOME est alors initialisée avec la valeur C:\APPS\maven\bin\. La deuxième instruction set "HOME=%HOME:~0,-1%" permet de supprimer le dernier caractère \. Et c'est ainsi que qu'il est possible d'exécuter le script mavenrc_pre.bat dans le répertoire des binaires.

@REM ----------------------------------------------------------------------------
@REM Licensed to the Apache Software Foundation (ASF) under one
@REM or more contributor license agreements.  See the NOTICE file
@REM distributed with this work for additional information
@REM regarding copyright ownership.  The ASF licenses this file
@REM to you under the Apache License, Version 2.0 (the
@REM "License"); you may not use this file except in compliance
@REM with the License.  You may obtain a copy of the License at
@REM
@REM    http://www.apache.org/licenses/LICENSE-2.0
@REM
@REM Unless required by applicable law or agreed to in writing,
@REM software distributed under the License is distributed on an
@REM "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
@REM KIND, either express or implied.  See the License for the
@REM specific language governing permissions and limitations
@REM under the License.
@REM ----------------------------------------------------------------------------

@REM ----------------------------------------------------------------------------
@REM Maven2 Start Up Batch script
@REM
@REM Required ENV vars:
@REM JAVA_HOME - location of a JDK home dir
@REM
@REM Optional ENV vars
@REM M2_HOME - location of maven2's installed home dir
@REM MAVEN_BATCH_ECHO - set to 'on' to enable the echoing of the batch commands
@REM MAVEN_BATCH_PAUSE - set to 'on' to wait for a key stroke before ending
@REM MAVEN_OPTS - parameters passed to the Java VM when running Maven
@REM     e.g. to debug Maven itself, use
@REM set MAVEN_OPTS=-Xdebug -Xnoagent -Djava.compiler=NONE -Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=8000
@REM ----------------------------------------------------------------------------

@REM Begin all REM lines with '@' in case MAVEN_BATCH_ECHO is 'on'
@echo off
@REM enable echoing my setting MAVEN_BATCH_ECHO to 'on'
@if "%MAVEN_BATCH_ECHO%" == "on"  echo %MAVEN_BATCH_ECHO%

@REM set %HOME% to equivalent of $HOME
@REM if "%HOME%" == "" (set "HOME=%HOMEDRIVE%%HOMEPATH%")
set "HOME=%~dp0"
set "HOME=%HOME:~0,-1%"

@REM Execute a user defined script before this one
if exist "%HOME%\mavenrc_pre.bat" call "%HOME%\mavenrc_pre.bat"

set ERROR_CODE=0

@REM set local scope for the variables with windows NT shell
if "%OS%"=="Windows_NT" @setlocal
if "%OS%"=="WINNT" @setlocal

@REM ==== START VALIDATION ====
if not "%JAVA_HOME%" == "" goto OkJHome

echo.
echo ERROR: JAVA_HOME not found in your environment.
echo Please set the JAVA_HOME variable in your environment to match the
echo location of your Java installation
echo.
goto error

:OkJHome
if exist "%JAVA_HOME%\bin\java.exe" goto chkMHome

echo.
echo ERROR: JAVA_HOME is set to an invalid directory.
echo JAVA_HOME = "%JAVA_HOME%"
echo Please set the JAVA_HOME variable in your environment to match the
echo location of your Java installation
echo.
goto error

:chkMHome
if not "%M2_HOME%"=="" goto valMHome

if "%OS%"=="Windows_NT" SET "M2_HOME=%~dp0.."
if "%OS%"=="WINNT" SET "M2_HOME=%~dp0.."
if not "%M2_HOME%"=="" goto valMHome

echo.
echo ERROR: M2_HOME not found in your environment.
echo Please set the M2_HOME variable in your environment to match the
echo location of the Maven installation
echo.
goto error

:valMHome

:stripMHome
if not "_%M2_HOME:~-1%"=="_\" goto checkMBat
set "M2_HOME=%M2_HOME:~0,-1%"
goto stripMHome

:checkMBat
if exist "%M2_HOME%\bin\mvn.bat" goto init

echo.
echo ERROR: M2_HOME is set to an invalid directory.
echo M2_HOME = "%M2_HOME%"
echo Please set the M2_HOME variable in your environment to match the
echo location of the Maven installation
echo.
goto error
@REM ==== END VALIDATION ====

:init
@REM Decide how to startup depending on the version of windows

@REM -- Windows NT with Novell Login
if "%OS%"=="WINNT" goto WinNTNovell

@REM -- Win98ME
if NOT "%OS%"=="Windows_NT" goto Win9xArg

:WinNTNovell

@REM -- 4NT shell
if "%@eval[2+2]" == "4" goto 4NTArgs

@REM -- Regular WinNT shell
set MAVEN_CMD_LINE_ARGS=%*
goto endInit

@REM The 4NT Shell from jp software
:4NTArgs
set MAVEN_CMD_LINE_ARGS=%$
goto endInit

:Win9xArg
@REM Slurp the command line arguments.  This loop allows for an unlimited number
@REM of agruments (up to the command line limit, anyway).
set MAVEN_CMD_LINE_ARGS=
:Win9xApp
if %1a==a goto endInit
set MAVEN_CMD_LINE_ARGS=%MAVEN_CMD_LINE_ARGS% %1
shift
goto Win9xApp

@REM Reaching here means variables are defined and arguments have been captured
:endInit
SET MAVEN_JAVA_EXE="%JAVA_HOME%\bin\java.exe"

@REM -- 4NT shell
if "%@eval[2+2]" == "4" goto 4NTCWJars

@REM -- Regular WinNT shell
for %%i in ("%M2_HOME%"\boot\classworlds-*) do set CLASSWORLDS_JAR="%%i"
goto runm2

@REM The 4NT Shell from jp software
:4NTCWJars
for %%i in ("%M2_HOME%\boot\classworlds-*") do set CLASSWORLDS_JAR="%%i"
goto runm2

@REM Start MAVEN2
:runm2
%MAVEN_JAVA_EXE% %MAVEN_OPTS% -classpath %CLASSWORLDS_JAR% "-Dclassworlds.conf=%M2_HOME%\bin\m2.conf" "-Dmaven.home=%M2_HOME%" org.codehaus.classworlds.Launcher %MAVEN_CMD_LINE_ARGS%
if ERRORLEVEL 1 goto error
goto end

:error
if "%OS%"=="Windows_NT" @endlocal
if "%OS%"=="WINNT" @endlocal
set ERROR_CODE=1

:end
@REM set local scope for the variables with windows NT shell
if "%OS%"=="Windows_NT" goto endNT
if "%OS%"=="WINNT" goto endNT

@REM For old DOS remove the set variables from ENV - we assume they were not set
@REM before we started - at least we don't leave any baggage around
set MAVEN_JAVA_EXE=
set MAVEN_CMD_LINE_ARGS=
goto postExec

:endNT
@endlocal & set ERROR_CODE=%ERROR_CODE%

:postExec
if exist "%HOME%\mavenrc_post.bat" call "%HOME%\mavenrc_post.bat"
@REM pause the batch file if MAVEN_BATCH_PAUSE is set to 'on'
if "%MAVEN_BATCH_PAUSE%" == "on" pause

if "%MAVEN_TERMINATE_CMD%" == "on" exit %ERROR_CODE%

cmd /C exit /B %ERROR_CODE%

Une fois mis en place, il est alors possible d'effectuer toutes les initialisations nécessaires. Dans l'exemple suivant, les variables mises en place sont les suivantes.

Paramètre Valeur
JAVA_HOME Emplacement de la JAVA_HOME, référencant une JDK, permettant d'utiliser une version spécifique de Jave pour Maven.
M2_HOME Emplacement de l'installation de Maven.
MAVEN_OPTS Options d'exécution de Maven, comme l'augmentation de la mémoire allouée.
M2_REPO Emplacement du dépot local.

Le contenu du script est simple.

set "JAVA_HOME=C:\Apps\Java\jdk1.6.0_33_x64"
set "M2_HOME=C:\Apps\maven\"
set MAVEN_OPTS=-Xms1024m -Xmx1024m -XX:NewSize=256m -XX:MaxNewSize=256m -XX:PermSize=256m -XX:MaxPermSize=256m
set "M2_REPO=C:\Apps\maven\repository"

Ainsi seule la modification de la variable PATH devient nécessaire, afin de pouvoir accéder au script mvn.bat. L'impact sur la machine est réduite au minimum.

A noter que la variable M2_HOME pourrait ne pas être spécialisée car elle est calculée dans le script, et M2_REPO est récupérée depuis le fichier de configuration settings.xml.

Version 3.3.X

Dans le cadre des versions 3.3.X, les scripts sont légèrement modifiés. Par défaut, le script exécuté est mvn.cmd qui recherche les fichiers mavenrc_pre.bat et mavenrc_pre.cmd dans le répertoire HOME de l'utilisateur, généralement un sous répertoire de C:/users.

@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

Il n'est donc pas possible de faire une spécialisation globale à la plateforme, mais pour chaque utilisateur. De plus, la variable M2_HOME est calculée en fonction du contexte d'exécution.

if not "_%M2_HOME:~-1%"=="_\" goto checkMCmd
set "M2_HOME=%M2_HOME:~0,-1%"

Donc en reprenant l'exemple précédent, seule la personnalisation de la mémoire et de l'emplacement de la JDK peuvent être conservées, comme dans l'exemple suivant.

set JAVA_HOME="C:\Apps\Java\jdk1.8.0_45"
set MAVEN_OPTS=-Xms1024m -Xmx1024m -XX:NewSize=256m -XX:MaxNewSize=256m

Ceci permet de positionner les variables ainsi.

Paramètre Valeur
JAVA_HOME Emplacement de la JAVA_HOME, référencant une JDK, permettant d'utiliser une version spécifique de Jave pour Maven.
MAVEN_OPTS Options d'exécution de Maven, comme l'augmentation de la mémoire allouée.

Command-icon.png A noter en cas d'utilisation d'un "émulateur" de shell Unix, comme avec GitBash, le script exécuté n'est pas celui spécifique pour Windows, mais celui pour Unix soit mvn. Ainsi le script de spécialisation n'est pas mavenrc_pre.bat ou mavenrc_pre.cmd mais /etc/mavenrc ou "$HOME/.mavenrc", comme indiqué au démarrage du script.

if [ -z "$MAVEN_SKIP_RC" ] ; then

  if [ -f /etc/mavenrc ] ; then
    . /etc/mavenrc
  fi

  if [ -f "$HOME/.mavenrc" ] ; then
    . "$HOME/.mavenrc"
  fi

fi

Le contenu du fichier, dans le répertoire HOME de l'utilisateur, contiendra les commandes suivantes.

export JAVA_HOME="c:/Apps/Java/jdk1.8.0_45"
export MAVEN_OPTS="-Xms1024m -Xmx1024m -XX:NewSize=256m -XX:MaxNewSize=256m"


Update icon.png Update

Version 3.3.3

La mise à jour est aussi simple que l'installation. Il suffit de télécharger la version et de la déployer sur la machine. Il est plus simple de déposer le contenu de l'archive dans le même emplacement, en remplacement, que la précédente version soit C:\APPS\maven. Ainsi, tous les paramétrages mis en place resteront valides.

En fonction des modifications réalisées, il faut reprendre :

  • Les paramétrages dans le fichier settings.xml;
  • Le fichier mavenrc_pre.bat.

Version 3.3.9

La mise à jour de cette version s'effectue exactement comme pour la 3.3.3