Menentukan lokasi penyimpanan lokal Maven sebagai parameter CLI

131

Apakah mungkin untuk mengatur lokasi repositori Maven lokal sebagai argumen pada baris perintah Maven?

Masalahnya adalah saya tidak menggunakan yang default di ~/.m2/repository. Namun saya memeriksa beberapa proyek yang sedang dibangun dengan pengaturannya sendiri -s settings.xml. Setting.xml itu tidak menentukan repositori lokal saya, jadi Maven menggunakan kegunaan ~/.m2/repositorylagi ... Saya ingin menggunakan lokasi repositori lokal non-default tanpa harus menambahkan <localRepository>elemen dalam settings.xml proyek

Saya sudah mencoba

  • -DlocalRepository="..."
  • $mvn invoker:run -s settings.xml clean install -DskipTests -DlocalRepositoryPath=
  • -Dsettings.localRepository

tetapi tidak satu pun dari opsi ini yang berfungsi.

Jadi saya pikir saya harus memutuskan apakah saya akan memodifikasi pengaturan pihak ketiga.xml atau memindahkan repo lokal saya ke ~

lisak
sumber
Jelas ini bukan salah Anda, tetapi proyek Maven seharusnya tidak menyediakan settings.xml. Lihat maven.apache.org/guides/mini/guide-configuring-maven.html
oberlies

Jawaban:

258

gunakan properti pakar maven.repo.local:

mvn -Dmaven.repo.local=$HOME/.my/other/repository clean install

Tidak settings.xmldiperlukan modifikasi .

Petr Kozelka
sumber
10
Repositori lokal harus berupa path absolut, maven.apache.org/guides/mini/guide-configuring-maven.html .
luka5z
3
Di Windows gunakan `mvn -D" maven.repo.local "=% USER_HOME% /. My / other / install bersih repositori`
Igor Bljahhin
Bisakah saya mengatur variabel lingkungan untuk mencapai hal yang sama?
powder366
@ powder366 no, AFAIK
Petr Kozelka
Menggunakan maven-3.6.3 direktori repositori lokal berfungsi sebagai jalur relatif (setidaknya untuk MacOS)
Ed Randall
8

Untuk git:

alias mvn='mvn "-Dmaven.repo.local=$(git rev-parse --show-toplevel)/.m2/repository"'

Ini menggunakan repositori maven terpisah di setiap repositori git

Andrew Sherman
sumber
2

Salah satu jenis cara hack yang akan berhasil adalah:

  1. Tambahkan <localRepository>${m2.localRepository}</localRepository>ke pengaturan Anda.xml
  2. Di mvn.sh atau mvn.bat Anda, tambahkan -Dm2.localRepository=<full path to home dir>/.m2/repository sebelum "$ @" pada perintah yang dijalankan. Ini akan membuat repo lokal default Anda tetap di tempatnya.
  3. Sekarang kamu bisa menggunakannya mvn -Dm2.localRepository=... <phases/goals>. Karena properti sistem baris perintah Anda akan ditambahkan ke baris perintah setelah yang ada di skrip mvn, itu akan diutamakan. (Setidaknya saya cukup yakin itu bekerja seperti itu di kedua windows dan linux, tetapi pengujian akan memberitahu.)
Ryan Stewart
sumber
Itu tidak membantu, saya menambahkan -Dm2.localRepository = "custom" sebelum "$ @" ke skrip mvn, masih menggunakan ~ / .m2 / repositori ... maka saya juga menyertakan -Dm2.localRepository = "custom" saat menjalankan $ mvn, masih menggunakan ~ / .m2 / repository ... hanya tanpa elemen localRepository di settings.xml, tidak ada cara untuk mengubahnya
lisak
@lisak: Apakah Anda melakukan langkah 1 menambahkan elemen localRepository ke settings.xml? Saya menguji ini, dan berhasil, kecuali bahwa Anda tidak dapat benar-benar menggunakan alias '~' dalam skrip mvn. Anda harus meletakkan path absolut, meskipun Anda mungkin bisa melakukan beberapa tipu script shell / batch script untuk mengatasi itu.
Ryan Stewart
Ini berfungsi, tetapi saya benar-benar tidak memiliki penjelasan ... Jika saya mendeklarasikan localRepository dalam $ M2_HOME / conf / settings.xml tanpa langkah 2, itu ditimpa oleh -s settings.xml dan tidak berfungsi, meskipun dengan langkah 2 itu berfungsi ... tetapi hanya langkah 2 tanpa penyimpanan lokal di $ M2_HOME / conf / settings.xml tidak berfungsi ... kedua langkah 1,2 harus diterapkan agar bisa berfungsi dan saya bahkan dapat mengubah lokasi kemudian melalui $ mvn -Dm2.localRepository = .. terima kasih Ryan
lisak