Perintah Maven untuk menentukan file pengaturan.xml mana yang digunakan Maven

278

Bagaimana cara menggunakan baris perintah maven untuk menentukan file settings.xml mana yang diambil Maven?

barang pecah belah
sumber

Jawaban:

333

Mulai pakar dengan opsi -X (debug) dan periksa awal output. Seharusnya ada sesuatu seperti ini:

...
[INFO] Error stacktraces are turned on.
[DEBUG] Reading global settings from c:\....\apache-maven-3.0.3\conf\settings.xml
[DEBUG] Reading user settings from c:\....\.m2\settings.xml
[DEBUG] Using local repository at C:\....\repository
...

(Nama direktori asli dihapus oleh saya)

elek
sumber
10
Mungkin ini tidak ada dalam output debug sampai maven 3 dirilis, tetapi posting Anda sekitar 2,5 tahun kemudian akhirnya jawaban tepat yang saya cari (maaf atas keterlambatan 6 bulan dalam menyadarinya).
harschware
Versi maven yang saya gunakan, maven2.x, tidak menunjukkan detail penting ini ketika flag -B digunakan. ... Sayangnya, jika Anda mencoba men-debug apa yang sedang terjadi dengan server Jenkins.
Cognitiaclaeves
168

Komentar Anda untuk jawaban cletus (benar) menyiratkan bahwa ada beberapa file pengaturan Maven yang terlibat.

Maven selalu menggunakan satu atau dua file pengaturan. Pengaturan global yang didefinisikan dalam ($ {M2_HOME} /conf/settings.xml) selalu diperlukan. File pengaturan pengguna (didefinisikan dalam $ {user.home} /. M2 / settings.xml) adalah opsional. Pengaturan apa pun yang ditentukan dalam pengaturan pengguna didahulukan dari pengaturan global terkait.

Anda dapat mengganti lokasi pengaturan global dan pengguna dari baris perintah, contoh berikut ini akan mengatur pengaturan global ke c: \ global \ settings.xml dan pengaturan pengguna ke c: \ user \ settings.xml :

mvn install --settings c:\user\settings.xml 
    --global-settings c:\global\settings.xml

Saat ini tidak ada properti atau sarana untuk menetapkan dari mana file pengaturan pengguna dan global digunakan dari dengan Maven. Untuk mengakses nilai-nilai ini, Anda harus memodifikasi MavenCli dan / atau DefaultMavenSettingsBuilder untuk menyuntikkan lokasi file ke objek Pengaturan yang diselesaikan.

Penjual Kaya
sumber
1
akan lebih bagus jika kita bisa memberikan beberapa pengaturan pengguna.xml, jadi kita bisa menggunakannya dengan proyek yang berbeda misalnya. Saya tahu bahwa kami dapat menggunakan profil. Tetapi akan jauh lebih baik jika akan ada file terpisah. Itu tidak mungkin, kan ?! Bersulang!
despot
Saya sedang mencari solusi untuk mengganti pengaturan pengguna saya hanya sekali tanpa harus mengutak-atik file. Jadi saya hanya menggunakan file global untuk pengaturan pengguna. Yaitu - pengaturan c: \ global \ settings.xml dengan cara ini file pengguna dihilangkan
msp
@despot, terlambat ke pesta tetapi dengan cara Anda dapat melalui beberapa profil yang ditentukan dan beberapa 'pemicu' khusus: maven.apache.org/settings.html#Aktivitas
tidak dapat dibagi
Itu selalu meminta pom di folder saat ini. "Sasaran yang Anda tentukan memerlukan proyek untuk dijalankan tetapi tidak ada POM dalam direktori ini (/). Harap verifikasi Anda memanggil Maven dari direktori yang benar. -> [Bantuan 1]"
Nilesh
137

Anda dapat menggunakan plugin bantuan pakar untuk memberi tahu Anda konten file pengaturan global dan pengguna Anda.

mvn help:effective-settings

akan meminta pakar untuk memuntahkan pengaturan global dan pengguna gabungan .

serg10
sumber
Ini membantu saya memperbarui maven repo repo1.maven.org/maven2 ke search.maven.org
Ricardo
40

Ini adalah file konfigurasi untuk Maven. Itu dapat ditentukan pada dua tingkatan:

  1. Tingkat Pengguna. File settings.xml ini memberikan konfigurasi untuk satu pengguna, dan biasanya disediakan dalam $ {user.home} /. M2 / settings.xml.

              NOTE: This location can be overridden with the CLI option:
    
              -s /path/to/user/settings.xml
  2. Tingkat Global. File settings.xml ini memberikan konfigurasi untuk semua pengguna Maven pada mesin (dengan asumsi mereka semua menggunakan instalasi Maven yang sama). Biasanya disediakan dalam $ {maven.home} /conf/settings.xml.

              NOTE: This location can be overridden with the CLI option:
    
              -gs /path/to/global/settings.xml
firstthumb
sumber
1
properti ini M2_HOME, bukan maven.home
Penjual Kaya
Itu tidak masalah. Jika Anda mengatur variabel lingkungan menggunakan maven.home, itu tidak akan menjadi masalah
firstthumb
24

The M2_HOMEvariabel lingkungan untuk satu global. Lihat Referensi Pengaturan :

The settingselemen dalam settings.xmlfile yang mengandung unsur-unsur yang digunakan untuk menentukan nilai-nilai yang mengkonfigurasi eksekusi Maven dalam berbagai cara, seperti pom.xml, tetapi tidak harus paket untuk setiap proyek tertentu, atau didistribusikan ke pemirsa. Ini termasuk nilai-nilai seperti lokasi repositori lokal, server repositori jarak jauh alternatif, dan informasi otentikasi. Ada dua lokasi tempat file settings.xml dapat hidup:

  • Instalasi Maven: $M2_HOME/conf/settings.xml
  • Instalasi pengguna: ${user.home}/.m2/settings.xml
cletus
sumber
Jika jawaban ini menyiratkan bahwa menentukan repositori hanya dilakukan dengan memeriksa lingkungan maka ini adalah jawaban yang valid. Saya berharap untuk belajar tentang saklar baris perintah atau sesuatu yang memberikan daftar pasti jalur yang memenuhi syarat untuk semua file settings.xml yang digunakan ... Saya pikir mungkin tidak ada mekanisme seperti itu.
harschware
3
+1 memberi jawaban, Cletus. Saya pikir ada baiknya untuk menyebutkan baris berikutnya dari tautan "Referensi Pengaturan" Anda:the former settings.xml are also called global settings, the latter settings.xml are referred to as user settings. If both files exists, their contents gets merged, with the user-specific settings.xml being dominant.
Kevin Meredith
Kebutuhan untuk memiliki konfigurasi khusus mesin untuk menemukan repositori pribadi sangat menyakitkan saya. Saya menyadari ini adalah status quo di ekosistem Jawa tetapi itu mengarah ke pengaturan pembangunan yang sangat tidak dapat diproduksi kembali.
jpierson
24

Metode cepat dan kotor untuk menentukan apakah Maven menggunakan pengaturan yang diinginkan.xml akan membatalkan xml-nya dan menjalankan beberapa perintah maven aman yang memerlukan pengaturan.xml.

Jika membaca ini settings.xml kemudian Maven laporan kesalahan: "Kesalahan membaca settings.xml ..."

topchef
sumber
3
Sementara jawaban Cletus sangat informatif, jawaban ini dalam arti paling ketat lebih dari apa yang saya cari (mengingat tampaknya ada kekurangan pengaturan.xml mekanisme pelaporan file di Maven sendiri)
harschware