Bagaimana menjalankan Maven dari direktori lain (tanpa cd ke project dir)?

248

Andaikata proyek maven saya berlokasi di /some/location/projectdan lokasi saya saat ini adalah /another/location/bagaimana saya bisa menjalankan maven build tanpa mengubah ke lokasi proyek cd /some/location/project?

Ali Shakiba
sumber
4
@khmarbaise - Saya mencoba mengotomatiskan pembuatan dan penerapan menggunakan beberapa skrip shell dan tidak selalu menggunakan cd untuk mengubah dir.
Ali Shakiba
@khmarbaise - Anda mungkin ingin merujuk ke beberapa file atau folder di atau dekat satu direktori, tetapi pom Anda dan file yang dirujuk berada di direktori lain.
jyoungdev

Jawaban:

432

Anda dapat menggunakan parameter -fdan menentukan path ke file pom Anda, misalnyamvn -f /path/to/pom.xml

Ini menjalankan pakar "seolah-olah" itu ada di /path/todirektori kerja.

dunni
sumber
39
Tidak, -f memulai Maven dengan pom spesifik itu, dan menurut definisi direktori di mana pom berada, adalah direktori yang berfungsi untuk Maven. Saya menggunakan ini di CI-Server saya untuk membangun modul spesifik di subdirektori, dan saya dapat meyakinkan Anda, bahwa itu berfungsi.
dunni
15
Gunakan titik untuk jalur relatif. misalnya./path/pom.xml
Snekse
3
Seperti kata dunni, ini tidak berhasil. Dir saat ini adalah di mana Anda berada. Kamu hanya menggunakan pom di dir lain. Maven tidak mendukung ini.
kabut
1
java.lang.IllegalArgumentException: Parameter 'direktori' bukan direktori
Damir Olejar
Bekerja untuk sebagian besar proyek saya. Sayangnya, beberapa proyek yang menggunakan plugin exec tidak dapat dibuat dengan cara ini karena plugin tidak menemukan executable walaupun direktori kerja dikonfigurasikan.
user2043553
15

Saya tidak berpikir pakar mendukung ini. Jika Anda menggunakan Unix, dan tidak ingin meninggalkan direktori Anda saat ini, Anda bisa menggunakan skrip shell kecil, fungsi shell, atau hanya sub-shell:

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

Sebagai fungsi bash (yang bisa Anda tambahkan ke ~ / .bashrc):

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

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

Saya menyadari ini tidak menjawab pertanyaan spesifik, tetapi dapat memberi Anda apa yang Anda cari. Saya tidak terbiasa dengan shell Windows, meskipun Anda harus dapat mencapai solusi serupa di sana juga.

Salam

Kyle Burton
sumber
4
Luar biasa. mvn -f param tidak bekerja dengan proyek multimodule menggunakan jalur relatif untuk referensi pom anak. Terima kasih, itulah yang saya cari.
redochka
1
Ini berfungsi di Mac (dan saya tahu ini akan bekerja di Linux). Pada Windows (atau platform apa pun) Anda harus dapat menyimpan jalur saat ini, cd ke proyek Anda, melakukan hal-hal mvn di sana dan cd kembali dalam skrip. Satu-satunya masalah adalah jika script berhenti di tengah jalan.
Erk
8

Bagi saya, bekerja seperti ini: mvn -f /path/to/pom.xml [goals]

Jonathan Patrício Benedet
sumber
0

Anda dapat mencoba ini:

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