Maven, hangi settings.xml dosyasının kullandığını belirleme komutu


Yanıtlar:


333

Macen'i -X seçeneği (hata ayıklama) ile başlatın ve çıktının başlangıcını inceleyin. Bunun gibi bir şey olmalı:

...
[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
...

(Orijinal dizin adları tarafımdan kaldırılır)


10
Belki de 3 sürümü serbest bırakılıncaya kadar hata ayıklama çıktısında değildi, ancak 2.5 yıl sonra yayınınız nihayet aradığım kesin cevaptı (fark etmedeki 6 aylık gecikme için özür dilerim).
harschware

Kullandığım maven sürümü, maven2.x, -B bayrağı kullanıldığında bu önemli ayrıntıyı göstermedi. ... talihsiz, Jenkins sunucusunda neler olup bittiğini ayıklamaya çalışıyorsanız.
Cognitiaclaeves

168

Cletus'un (doğru) cevabına yaptığınız yorum, dahil edilen birden fazla Maven ayar dosyasının olduğunu ima eder.

Maven her zaman bir veya iki ayar dosyası kullanır. ($ {M2_HOME} /conf/settings.xml) içinde tanımlanan global ayarlar her zaman gereklidir. Kullanıcı ayarları dosyası ($ {user.home} /. M2 / settings.xml dosyasında tanımlanmıştır) isteğe bağlıdır. Kullanıcı ayarlarında tanımlanan ayarlar, ilgili global ayarlara göre önceliklidir.

Genel ve kullanıcı ayarlarının konumunu komut satırından geçersiz kılabilirsiniz, aşağıdaki örnekte genel ayarlar c: \ global \ settings.xml ve kullanıcı ayarları c: \ user \ settings.xml olarak ayarlanacaktır :

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

Şu anda Maven ile hangi kullanıcı ve genel ayar dosyalarının kullanıldığını belirleyen bir özellik veya araç bulunmamaktadır. Bu değerlere erişmek için MavenCli ve / veya DefaultMavenSettingsBuilder üzerinde değişiklik yaparak dosya konumlarını çözümlenmiş Settings nesnesine enjekte etmeniz gerekir.


1
birden fazla kullanıcının settings.xml dosyasını sağlayabilirsek harika olur, bu yüzden bunları örneğin farklı projelerle kullanabiliriz. Bir profil kullanabileceğimizi biliyorum. Ancak ayrı bir dosya olsaydı çok daha iyi olurdu. Bu mümkün değil, değil mi ?! Şerefe!
despot

Dosya ile kurcalamak zorunda kalmadan kullanıcı ayarlarımı sadece bir kez geçersiz kılmak için bir çözüm arıyordum. Bu yüzden sadece kullanıcı ayarları için global dosyayı kullandım. Yani - ayarlar c: \ global \ settings.xml bu şekilde kullanıcı dosyası atlandı
msp

@despot, partiye geç ancak bir şekilde tanımlanmış birden fazla profil ve bazı özel 'tetikleyiciler' aracılığıyla yapabilirsiniz: maven.apache.org/settings.html#Activation
bölünmez

Her zaman geçerli klasörde pom ister. "Belirttiğiniz hedefin yürütülmesi için bir proje gerekiyor, ancak bu dizinde POM yok (/). Lütfen Maven'i doğru dizinden çağırdığınızı doğrulayın. -> [Yardım 1]"
Nilesh


40

Bu, Maven için yapılandırma dosyasıdır. İki düzeyde belirtilebilir:

  1. Kullanıcı düzeyi. Bu settings.xml dosyası tek bir kullanıcı için yapılandırma sağlar ve normalde $ {user.home} /. M2 / settings.xml biçiminde sağlanır.

              NOTE: This location can be overridden with the CLI option:
    
              -s /path/to/user/settings.xml
  2. Küresel düzey. Bu settings.xml dosyası, bir makinedeki tüm Maven kullanıcıları için yapılandırma sağlar (hepsinin aynı Maven kurulumunu kullandıkları varsayılarak). Normalde $ {maven.home} /conf/settings.xml biçiminde sağlanır.

              NOTE: This location can be overridden with the CLI option:
    
              -gs /path/to/global/settings.xml

1
mülkiyet maven.home değil M2_HOME
Zengin Satıcı

Önemli değil. Ortam değişkenini maven.home kullanarak ayarlarsanız, sorun olmaz
firstthumb

24

M2_HOMEKüresel biri için ortam değişkeni. Bkz. Ayarlar Referansı :

settingsEleman settings.xmldosyası gibi çeşitli şekillerde Maven'in yürütme yapılandırmak değerler tanımlamak için kullanılan öğeleri içerir pom.xmlfakat herhangi bir projeye birlikte ya da bir izleyici dağıtılacak olmamalıdır. Bunlar, yerel havuz konumu, alternatif uzak havuz sunucuları ve kimlik doğrulama bilgileri gibi değerleri içerir. Settings.xml dosyasının yaşayabileceği iki konum vardır:

  • Maven kurulumu: $M2_HOME/conf/settings.xml
  • Bir kullanıcının yüklemesi: ${user.home}/.m2/settings.xml

Bu cevap, deponun belirlenmesinin sadece çevreyi inceleyerek yapıldığını ima etmekse, bu geçerli bir cevaptır. Bir komut satırı anahtarı ya da kullanılan tüm settings.xml dosyaları için nitelikli yolların kesin bir listesini veren bir şey öğrenmek umuyordum ... Bence muhtemelen böyle bir mekanizma yoktur.
harschware

3
+1 cevap, Cletus. Bence "Ayarlar Referans" bağlantınızdaki bir sonraki satırdan bahsetmeye değer: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

Özel depoları bulmak için makineye özel bir konfigürasyona ihtiyaç duyulması beni çok üzüyor. Bunun Java ekosistemindeki statüko olduğunu fark ettim ama çok fazla çoğaltılamaz yapı kurulumlarına yol açıyor.
jpierson

24

Maven'in istenen settings.xml dosyasını kullanıp kullanmadığını belirlemek için hızlı ve kirli bir yöntem, xml'sini geçersiz kılar ve settings.xml gerektiren bazı güvenli maven komutlarını çalıştırır.

Bu settings.xml dosyasını okursa Maven bir hata bildirir: "settings.xml okunurken hata ..."


3
Cletus'un cevabı çok bilgilendirici olsa da, bu cevap aradığım şeyden daha katı bir şekilde (Maven'in kendisinde herhangi bir settings.xml dosya raporlama mekanizmasının eksikliği göz önüne alındığında)
yaşında harschware
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.