Wie führe ich Maven aus einem anderen Verzeichnis aus (ohne CD in das Projektverzeichnis)?

247

Angenommen, mein Maven-Projekt befindet sich in /some/location/projectund mein aktueller Standort ist, /another/location/wie kann ich Maven Build ausführen, ohne zum Projektstandort zu wechseln cd /some/location/project?

Ali Shakiba
quelle
4
@khmarbaise - Ich versuche, Builds und Bereitstellungen mithilfe einiger Shell-Skripte zu automatisieren, und es ist nicht direkt, immer CD zu verwenden, um das Verzeichnis zu ändern.
Ali Shakiba
@khmarbaise - Möglicherweise möchten Sie auf mehrere Dateien oder Ordner in oder in der Nähe eines Verzeichnisses verweisen, aber Ihr POM und die Dateien, auf die es verweist, befinden sich in einem anderen.
Jyoungdev

Antworten:

431

Sie können den Parameter verwenden -fund den Pfad zu Ihrer POM-Datei angeben, zmvn -f /path/to/pom.xml

Dies führt maven "als ob" es /path/tofür das Arbeitsverzeichnis wäre.

dunni
quelle
39
Nein, -f startet Maven mit diesem bestimmten Pom, und per Definition ist das Verzeichnis, in dem sich der Pom befindet, das Arbeitsverzeichnis für Maven. Ich verwende dies in meinem CI-Server, um bestimmte Module in Unterverzeichnissen zu erstellen, und ich kann Ihnen versichern, dass es funktioniert.
Dunni
15
Verwenden Sie einen Punkt für relative Pfade. zB./path/pom.xml
Snekse
3
Wie Dunni sagt, funktioniert das nicht. Das aktuelle Verzeichnis ist, wo Sie sind. Du benutzt nur einen Pom in einem anderen Verzeichnis. Maven unterstützt das nicht.
Nebel
1
java.lang.IllegalArgumentException: Parameter 'Verzeichnis' ist kein Verzeichnis
Damir Olejar
Funktioniert für die meisten meiner Projekte. Leider können einige Projekte, die das exec-Plugin verwenden, nicht auf diese Weise erstellt werden, da das Plugin die ausführbare Datei nicht findet, obwohl das Arbeitsverzeichnis konfiguriert ist.
user2043553
15

Ich glaube nicht, dass Maven dies unterstützt. Wenn Sie unter Unix arbeiten und Ihr aktuelles Verzeichnis nicht verlassen möchten, können Sie ein kleines Shell-Skript, eine Shell-Funktion oder nur eine Sub-Shell verwenden:

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

Als Bash-Funktion (die Sie Ihrem ~ / .bashrc hinzufügen können):

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

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

Mir ist klar, dass dies nicht die spezifische Frage beantwortet, sondern Ihnen möglicherweise das liefert, wonach Sie suchen. Ich bin mit der Windows-Shell nicht vertraut, obwohl Sie dort auch eine ähnliche Lösung finden sollten.

Grüße

Kyle Burton
quelle
4
Ausgezeichnet. mvn -f param funktioniert nicht mit Multimodul-Projekten, die einen relativen Pfad verwenden, um auf die untergeordneten Poms zu verweisen. Danke, das habe ich gesucht.
Redochka
1
Habe das auf dem Mac zum Laufen gebracht (und ich weiß, dass es unter Linux funktionieren wird). Unter Windows (oder einer anderen Plattform) sollten Sie in der Lage sein, den aktuellen Pfad zu speichern, eine CD zu Ihrem Projekt zu erstellen, dort MVN-Inhalte zu erstellen und die CD in einem Skript zurückzugeben. Das einzige Problem wäre, wenn das Skript auf halbem Weg angehalten würde.
Erk
8

Für mich funktioniert das so: mvn -f /path/to/pom.xml [goals]

Jonathan Patrício Benedet
quelle
0

Sie können dies versuchen:

pushd ../
maven install [...]
popd
Mick
quelle