1 votes

Construire Maven par lots en cassant cmd.exe ?

J'avais un fichier Windows .bat avec un script pour la compilation d'un projet sur lequel je travaille. La dernière commande est une construction maven. Comme elle prend un certain temps pour se terminer, je voulais être notifié quand elle le fait.

Je me suis dit que le moyen le plus simple serait l'équivalent de echo -e '\a' . Alors j'ai regardé un peu et j'ai ajouté echo <BELL> ( <BELL> étant un octet avec le code 0x07) à la fin de mon script. J'ai ajouté echo devant toutes les commandes pour un test rapide et ça a marché comme sur des roulettes.

J'ai supprimé les échos et exécuté le script. Quelques minutes plus tard, je remarque que c'est terminé. Je n'ai pas entendu la cloche, mais j'ai supposé que je ne faisais pas attention. J'ai refait le test avec des échos et la cloche s'est bien arrêtée. Cependant, cela s'est produit plusieurs fois et je sais maintenant avec certitude que je ne l'ai pas simplement manquée, elle n'est pas là.

J'ai essayé de faire un simple programme C qui exécute juste printf("\a") pour les mêmes résultats. J'ai alors essayé un echo please work ce texte n'est pas apparu non plus. J'ai compris que la différence réside dans le fait que la commande maven est ou n'est pas renvoyée. Pour résumer :

  • Windows 10, Maven pour Windows comme dernière commande effective dans .bat script.
  • Si la commande mvn est précédée de echo, tout fonctionne comme il se doit.
  • Si la commande mvn est lancée, les commandes suivantes dans le .bat ne sont pas exécutées.
  • Une fois le script terminé, il semble n'y avoir aucun problème avec l'instance cmd.exe.

J'ai Cygwin (nécessaire pour la construction) donc si c'est utile pour le débogage, ce n'est pas un problème.

EDIT : Il semble donc que Maven soit lui-même un fichier batch. Intéressant, where mvn liste des premiers bhahlabh \mnv (un bash script) et ensuite blablabla \mvn.com

2voto

Michael Harvey Points 1693

Dans Maven pour Windows, la commande 'mvn' fait référence à un fichier batch script appelé soit mvn.bat soit mvn.cmd (selon la version de Maven). Regardez dans le fichier bin dossier. En termes simples, un fichier .bat est un fichier .cmd, et vice versa. Ce sont des scripts du langage batch cmd.exe.

Sur le site Web de Maven :

Vous exécutez Maven en invoquant un outil de ligne de commande : mvn.cmd du bac du répertoire Maven. Pour faire cela de manière pratique, ${maven.home} \bin doit être dans votre PATH, tout comme les commandes du SDK Java. Vous pouvez ajouter répertoires à votre PATH dans le panneau de configuration. version de Windows.

Maven sur Windows

Sous cmd.exe, si vous exécutez un deuxième fichier batch (.bat ou .cmd) à partir d'un premier, en utilisant uniquement son nom, la commande est transférée vers le deuxième, et ne revient jamais.

Le contrôle revient si vous invoquez le deuxième script en utilisant la commande CALL.

Un exemple pour montrer ce que je veux dire :

Voici un .bat (ou un .cmd si vous voulez)

@echo off
echo I am a.bat
b.bat
echo back again

Voici b.bat (ou b.cmd si vous préférez)

@echo off
echo I am b.bat

si vous exécutez a.bat, et que b.bat est soit dans le même dossier, soit dans votre PATH, vous verrez ceci

I am a.bat
I am b.bat

Vous ne verrez pas back again à moins que, dans a.bat, vous ayez changé b.bat à call b.bat

Essayez de mettre CALL avant 'mvn' dans votre lot.

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X