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?
@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.
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:
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.
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]
Antworten:
Sie können den Parameter verwenden
-f
und den Pfad zu Ihrer POM-Datei angeben, zmvn -f /path/to/pom.xml
Dies führt maven "als ob" es
/path/to
für das Arbeitsverzeichnis wäre.quelle
./path/pom.xml
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:
Als Bash-Funktion (die Sie Ihrem ~ / .bashrc hinzufügen können):
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
quelle
Für mich funktioniert das so:
mvn -f /path/to/pom.xml [goals]
quelle
Sie können dies versuchen:
quelle