Jak uruchomić Maven z innego katalogu (bez płyty CD do katalogu projektu)?

249

Załóżmy, że mój projekt maven znajduje się w /some/location/projectmojej bieżącej lokalizacji i /another/location/jak mogę uruchomić kompilację maven bez zmiany lokalizacji projektu cd /some/location/project?

Ali Shakiba
źródło
4
@khmarbaise - Próbuję zautomatyzować kompilację i wdrożenia przy użyciu niektórych skryptów powłoki i nie zawsze jest łatwo używać cd do zmiany katalogu.
Ali Shakiba,
@khmarbaise - możesz odwoływać się do wielu plików lub folderów w lub w pobliżu jednego katalogu, ale pom i pliki, do których się odnosi, znajdują się w innym.
jyoungdev

Odpowiedzi:

432

Możesz użyć parametru -fi określić ścieżkę do pliku pom, npmvn -f /path/to/pom.xml

To uruchamia maven „tak jakby” znajdowało się w /path/tokatalogu roboczym.

Dunni
źródło
39
Nie, -f uruchamia Maven z tym konkretnym pom, a z definicji katalog, w którym znajduje się pom, jest katalogiem roboczym Maven. Używam tego w moim CI-Server do budowania określonych modułów w podkatalogach, i mogę was zapewnić, że działa.
dunni
15
Użyj kropki do względnych ścieżek. np../path/pom.xml
Snekse
3
Jak mówi Dunni, to nie działa. Obecny katalog jest tam, gdzie jesteś. Używasz pom w innym reż. Maven tego nie obsługuje.
mgła
1
java.lang.IllegalArgumentException: Parametr „katalog” nie jest katalogiem
Damir Olejar
Działa w większości moich projektów. Niestety, niektóre projekty korzystające z wtyczki exec nie mogą być budowane w ten sposób, ponieważ wtyczka nie znajduje pliku wykonywalnego, mimo że katalog roboczy jest skonfigurowany.
user2043553
15

Nie sądzę, że maven to obsługuje. Jeśli korzystasz z Uniksa i nie chcesz opuszczać bieżącego katalogu, możesz użyć małego skryptu powłoki, funkcji powłoki lub po prostu podpowłoki:

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

Jako funkcja bash (którą możesz dodać do ~ / .bashrc):

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

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

Zdaję sobie sprawę, że to nie odpowiada na konkretne pytanie, ale może zapewnić ci to, czego szukasz. Nie jestem zaznajomiony z powłoką systemu Windows, chociaż powinieneś również być w stanie znaleźć podobne rozwiązanie.

pozdrowienia

Kyle Burton
źródło
4
Doskonały. mvn -f param nie działa z projektami wielomodułowymi używającymi ścieżki względnej do odniesienia poms potomnych. Dzięki, tego szukałem.
redochka
1
Mam to działa na Macu (i wiem, że będzie działać na Linuksie). W systemie Windows (lub dowolnej platformie) powinieneś być w stanie zapisać bieżącą ścieżkę, cd do swojego projektu, zrobić tam mvn rzeczy i cd z powrotem w skrypcie. Jedynym problemem byłoby, gdyby skrypt zatrzymał się w połowie.
Erk
8

Dla mnie działa w ten sposób: mvn -f /path/to/pom.xml [goals]

Jonathan Patrício Benedet
źródło
0

Możesz spróbować:

pushd ../
maven install [...]
popd
Mick
źródło