par Alexandre Alapetite le 2007-09-30 ; mise à jour 2011-09-09

Java batch compilation

Il est parfois nécessaire de compiler un projet Java sur une machine dépourvue de tout outil de programmation.

Je propose sur cette page un script batch (.bat) Windows (style MS-DOS) capable de chercher la meilleure version Java disponible sur la machine et de l’utiliser pour compiler automatiquement un projet Java complet.

English

Script .bat générique de compilation Java

Structure de fichiers

Le projet Java doit respecter une certaine organisation :

.\JavaCompile.bat
Le script de compilation présenté sur cette page
.\src\
Répertoire obligatoire contenant les sources Java (.java) du projet à compiler
.\lib\
Répertoire facultatif contenant les librairies Java (.jar) utilisées par le projet
.\bin\
Répertoire de sortie créé automatiquement où se trouveront les classes Java compilées (.class)

Description

  1. Le script va chercher dans les répertoires d’installation classiques (comme C:\Program Files\Java\) la meilleure (plus récente) version de Java disponible (à partir de Java version 5, soit 1.5.0), en donnant la priorité au JDK face au JRE.
  2. Le script fait une liste des fichiers source .java présents dans .\src\.
  3. Le script fait une liste des librairies .jar présentes dans .\lib\.
  4. Le script compile l’ensemble avec javac.exe dans .\bin\

Script

Ce batch nécessite au minimum Windows 2000 (XP, Vista, Win7…).

JavaCompile.bat

@echo off
echo 	======== Java batch compile by Alexandre Alapetite ========
echo 	== 2007-09-30 / 2011-09-09 http://alexandre.alapetite.fr ==

rem Défini le chemin Java préféré
rem set JAVA_HOME=C:\Program Files\Java\jdk1.7.0
if defined JAVA_HOME (
if exist "%JAVA_HOME%\bin\javac.exe" goto okJavac
)
rem Si le chemin préféré ne marche pas, cherche la meilleure version de Java disponible
set JAVA_ROOT=%ProgramFiles%\Java\
if not exist "%JAVA_ROOT%\" set JAVA_ROOT=%ProgramFiles(x86)%\Java\
if not exist "%JAVA_ROOT%\" set JAVA_ROOT=%SystemDrive%\Java\
if not exist "%JAVA_ROOT%\" set JAVA_ROOT=%HOMEDRIVE%\Java\
if not exist "%JAVA_ROOT%\" set JAVA_ROOT=%SystemDrive%\
echo Search Java JDK...
for /F "usebackq delims==" %%f in (`dir "%JAVA_ROOT%jdk*" /B /O:-N`) do if exist "%JAVA_ROOT%%%f\bin\javac.exe" (
set JAVA_HOME="%JAVA_ROOT%%%f"
goto foundJava
)
echo Search Java JRE...
for /F "usebackq delims==" %%f in (`dir "%JAVA_ROOT%jre*" /B /O:-N`) do if exist "%JAVA_ROOT%%%f\bin\javac.exe" (
set JAVA_HOME="%JAVA_ROOT%%%f"
goto foundJava
)
:foundJava
rem Supprime les guillemets autour de JAVA_HOME, qui sont
rem nécessaire jusqu’ici pour éviter un bug avec les répertoires
rem dont le nom contient une parenthèse fermante, tel "C:\Program Files (x86)"
for /F "useback tokens=*" %%s in ('%JAVA_HOME%') do set JAVA_HOME=%%~s
if exist "%JAVA_HOME%\bin\javac.exe" goto okJavac
echo Cannot find Java compiler. Please install Java JDK or edit %%JAVA_HOME%% path.
goto end
:okJavac
echo Java path "%JAVA_HOME%"
"%JAVA_HOME%\bin\javac.exe" -version

rem Compile .\src\\*.java dans .\bin\\*.class en utilisant les librairies de .\lib\\*.jar
subst m: %0\..
rem "%0\.." est le chemin réel du fichier batch
pushd m:
cd \
echo Search java sources in .\src\...
dir src\*.java /B/S > javasrc.tmp~
if ERRORLEVEL 1 (
echo Cannot find Java source files in .\src\
goto abort
)
echo Search jar libraries in .\lib\...
if exist lib for /F "usebackq delims==" %%l in (`dir lib\*.jar /B/S`) do echo -classpath %%l >> javasrc.tmp~
echo Compile in .\bin\...
if exist bin rmdir /S /Q bin
mkdir bin
echo on
@"%JAVA_HOME%\bin\javac.exe" -d bin @javasrc.tmp~
@echo off
echo Done.
:abort
del javasrc.tmp~
popd
subst m: /d

:end
set JAVA_ROOT=
echo on

Historique

1.3 2011-09-09
Ajout du support pour les librairies multiples, et simplification
1.2 2011-01-07
Compatibilité avec les répertoires dont le nom contient une parenthèse fermante (bug de l’interpréteur batch), comme “C:\Program Files (x86)\
1.1 2008-05-15
Détection de l’emplacement réel du fichier batch avec %0\..
1.0 2007-11-25
Distribution initiale

Licence

Ce contenu est protégé par une licence Creative Commons Paternité - Partage des Conditions Initiales à l’Identique 2.0 France “BY-SA (FR)” [Creative Commons License]


Commentaires

object : Voir les commentaires

http://alexandre.alapetite.fr

Retour