39 votes

BAT pour créer le CLASSPATH de Java

Je veux distribuer une application de ligne de commande écrite en Java sur Windows.

Mon application est distribuée sous la forme d'un fichier zip, qui comporte un répertoire lib contenant les fichiers .jar nécessaires pour invoquer ma classe principale. Actuellement, pour les environnements Unix, j'ai un shell script qui invoque la commande java avec un CLASSPATH créé en ajoutant tous les fichiers du répertoire lib.

Comment puis-je écrire un fichier .BAT avec une fonctionnalité similaire ? Quel est l'équivalent de la commande find Unix dans le monde Windows ?

65voto

PintSizedCat Points 4221

Vous voulez utiliser la boucle for dans le lot script.

 @echo off
 setLocal EnableDelayedExpansion
 set CLASSPATH="
 for /R ./lib %%a in (*.jar) do (
   set CLASSPATH=!CLASSPATH!;%%a
 )
 set CLASSPATH=!CLASSPATH!"
 echo !CLASSPATH!

Cela m'a vraiment aidé quand je cherchais un script batch pour itérer à travers tous les fichiers dans un répertoire, il s'agit de supprimer des fichiers mais c'est très utile.

Un script batch d'une ligne pour supprimer les répertoires vides

Pour être honnête, utilisez la réponse de Jon, c'est bien mieux si tous les fichiers sont dans un seul répertoire, cela pourrait vous aider à un autre moment.

29voto

Jon Skeet Points 692016

Pourquoi utiliser la fonction "trouver" ? On peut supposer que vous connaissez à l'avance toutes les bibliothèques dont votre fichier jar a besoin, alors pourquoi ne pas simplement les lister ?

Alternativement, vous pouvez toujours utiliser -Djava.ext.dirs=lib et le laisser tout ramasser de cette façon.

18voto

basszero Points 14539

Depuis la version 6.0, Java prend en charge les classpaths avec caractères génériques.

Syntaxe du chemin de classe de la ligne de commande Java

5voto

Eric Sorensen Points 61

Une variante si vous voulez que le paramètre CLASSPATH tienne en dehors du script et que vous n'avez pas démarré le shell avec /V, vous pouvez faire quelque chose comme ceci :

@echo off
FOR /R ./lib %%a in (*.jar) DO CALL :AddToPath %%a
ECHO %CLASSPATH%
GOTO :EOF

:AddToPath
SET CLASSPATH=%1;%CLASSPATH%
GOTO :EOF

Utile pour configurer votre environnement lorsque vous ne faites que jouer sur la ligne de commande.

4voto

duffymo Points 188155

On dirait un JAR exécutable pourrait fonctionner pour vous. Si vous distribuez un ZIP contenant tous les JAR dont votre routine principale a besoin, et que vous l'exécutez réellement dans un shell de commande, vous pourriez peut-être créer un JAR exécutable avec la Main-Class et le Classpath définis dans le manifeste. Tout ce que vos utilisateurs ont à faire est de double cliquer sur le JAR et Bob est votre oncle.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X