Come eseguire Maven da un'altra directory (senza cd per dir progetto)?


249

Supponendo che il mio progetto maven sia situato /some/location/projecte la mia posizione attuale è /another/location/come posso eseguire maven build senza cambiare la posizione del progetto cd /some/location/project?


4
@khmarbaise - Sto cercando di automatizzare la compilazione e le distribuzioni usando alcuni script di shell e non è giusto usare sempre cd per cambiare dir.
Ali Shakiba,

@khmarbaise - potresti voler fare riferimento a più file o cartelle in o vicino a una directory, ma il tuo pom e i file a cui fa riferimento si trovano in un'altra.
jyoungdev,

Risposte:


432

È possibile utilizzare il parametro -fe specificare il percorso del file pom, ad esmvn -f /path/to/pom.xml

Questo esegue maven "come se" fosse nella /path/todirectory di lavoro.


39
No, -f avvia Maven con quel pom specifico e, per definizione, la directory in cui si trova pom è la directory di lavoro di Maven. Lo uso nel mio CI-Server per creare moduli specifici nelle sottodirectory e posso assicurarti che funziona.
Dunni

15
Utilizzare un punto per percorsi relativi. ad es../path/pom.xml
Snekse,

3
Come dice Dunni, questo non funziona. La directory corrente è dove sei. Stai solo usando un pom in un'altra directory. Maven non supporta questo.
nebbia

1
java.lang.IllegalArgumentException: il parametro 'directory' non è una directory
Damir Olejar,

Funziona per la maggior parte dei miei progetti. Sfortunatamente, alcuni progetti che usano il plugin exec non possono essere costruiti in questo modo perché il plugin non trova l'eseguibile anche se la directory di lavoro è configurata.
user2043553

15

Non credo che Maven lo sostenga. Se sei su Unix e non vuoi lasciare la tua directory corrente, puoi usare uno script di shell piccolo, una funzione di shell o solo una shell secondaria:

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

Come funzione bash (che potresti aggiungere al tuo ~ / .bashrc):

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

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

Mi rendo conto che questo non risponde alla domanda specifica, ma può fornirti quello che cerchi. Non ho familiarità con la shell di Windows, anche se dovresti essere in grado di raggiungere una soluzione simile anche lì.

Saluti


4
Eccellente. mvn -f param non funziona con progetti multimodulo utilizzando il percorso relativo per fare riferimento ai figli figlio. Grazie, è quello che stavo cercando.
redochka,

1
Ha funzionato su Mac (e so che funzionerà su Linux). Su Windows (o qualsiasi piattaforma) dovresti essere in grado di salvare il percorso corrente, cd nel tuo progetto, fare cose mvn lì e cd in uno script. L'unico problema sarebbe se lo script si fermasse a metà.
Erk,


0

Puoi provare questo:

pushd ../
maven install [...]
popd
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.