Comment exécuter Maven à partir d'un autre répertoire (sans cd dans le répertoire du projet)?

248

Supposons que mon projet maven se trouve dans /some/location/projectet mon emplacement actuel est /another/location/comment puis-je exécuter la construction maven sans changer d'emplacement de projet cd /some/location/project?

Ali Shakiba
la source
4
@khmarbaise - J'essaie d'automatiser la construction et les déploiements à l'aide de certains scripts shell et ce n'est pas simple d'utiliser toujours cd pour changer dir.
Ali Shakiba
@khmarbaise - vous voudrez peut-être faire référence à plusieurs fichiers ou dossiers dans ou à proximité d'un répertoire, mais votre pom et les fichiers auxquels il fait référence se trouvent dans un autre.
jyoungdev

Réponses:

432

Vous pouvez utiliser le paramètre -fet spécifier le chemin d'accès à votre fichier pom, par exemplemvn -f /path/to/pom.xml

Cela exécute maven "comme si" il se trouvait dans /path/tole répertoire de travail.

Dunni
la source
39
Non, -f démarre Maven avec ce pom spécifique et, par définition, le répertoire où se trouve le pom est le répertoire de travail de Maven. Je l'utilise dans mon CI-Server pour construire des modules spécifiques dans des sous-répertoires, et je peux vous assurer que cela fonctionne.
dunni
15
Utilisez un point pour les chemins relatifs. par exemple./path/pom.xml
Snekse
3
Comme le dit Dunni, cela ne fonctionne pas. Le répertoire actuel est l'endroit où vous vous trouvez. Vous utilisez juste un pom dans un autre répertoire. Maven ne supporte pas cela.
brume
1
java.lang.IllegalArgumentException: Le paramètre 'répertoire' n'est pas un répertoire
Damir Olejar
Fonctionne pour la plupart de mes projets. Malheureusement, certains projets utilisant le plugin exec ne peuvent pas être construits de cette façon car le plugin ne trouve pas l'exécutable même si le répertoire de travail est configuré.
user2043553
15

Je ne pense pas que Maven supporte cela. Si vous êtes sous Unix et que vous ne voulez pas quitter votre répertoire actuel, vous pouvez utiliser un petit script shell, une fonction shell ou simplement un sous-shell:

user@host ~/project$ (cd ~/some/location; mvn install)
[ ... mvn build ... ]
user@host ~/project$

En tant que fonction bash (que vous pouvez ajouter à votre ~ / .bashrc):

function mvn-there() {
  DIR="$1"
  shift
  (cd $DIR; mvn "$@")     
} 

user@host ~/project$ mvn-there ~/some/location install)
[ ... mvn build ... ]
user@host ~/project$

Je me rends compte que cela ne répond pas à la question spécifique, mais peut vous fournir ce que vous recherchez. Je ne connais pas le shell Windows, mais vous devriez également pouvoir y trouver une solution similaire.

Cordialement

Kyle Burton
la source
4
Excellent. mvn -f param ne fonctionne pas avec les projets multimodules utilisant un chemin relatif pour référencer les poms enfants. Merci, c'est ce que je cherchais.
redochka
1
Je l'ai fait fonctionner sur Mac (et je sais que cela fonctionnera sur Linux). Sur Windows (ou n'importe quelle plate-forme), vous devriez être en mesure d'enregistrer le chemin actuel, de cd dans votre projet, de faire des trucs mvn là-bas et de revenir dans un script. Le seul problème serait que le script s'arrête à mi-chemin.
Erk
8

Pour moi, ça marche comme ça: mvn -f /path/to/pom.xml [goals]

Jonathan Patrício Benedet
la source
0

Vous pouvez essayer ceci:

pushd ../
maven install [...]
popd
Mick
la source