Maven'in yerel depo konumunu bir CLI parametresi olarak belirtme


131

Yerel Maven deposunun konumunu Maven komut satırında bağımsız değişken olarak ayarlamak mümkün mü?

Mesele şu ki, varsayılan olanı kullanmıyorum ~/.m2/repository. Ancak kendi ayarlarıyla inşa edilen bazı projeleri kontrol ettim -s settings.xml. Bu settings.xml yerel depomu belirtmediğinden Maven ~/.m2/repositorytekrar kullanıyor ... <localRepository>Projenin settings.xml dosyasına bir öğe eklemek zorunda kalmadan varsayılan olmayan bir yerel depo konumu kullanmak istiyorum

denedim

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

ancak bu seçeneklerin hiçbiri çalışmıyor.

Bu yüzden bir üçüncü taraf settings.xml dosyasını değiştirip değiştirmeyeceğime veya yerel depomu şuraya taşıyacağıma karar vermem gerektiğini düşünüyorum. ~


Açıkçası bu sizin hatanız değil, ancak Maven projeleri bir settings.xml. Bkz. Maven.apache.org/guides/mini/guide-configuring-maven.html
oberlies

Yanıtlar:


258

maven özelliğini kullan maven.repo.local:

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

Herhangi bir değişiklik settings.xmlgerekli değildir.


10
Yerel depo mutlak bir yol olmalıdır, maven.apache.org/guides/mini/guide-configuring-maven.html .
luka5z

3
Windows'ta "mvn -D" maven.repo.local "=% USER_HOME% /. My / other / repository clean install '
komutunu kullanın

Aynı şeyi elde etmek için bir ortam değişkeni ayarlayabilir miyim?
toz366

@ powder366 hayır, AFAIK
Petr Kozelka

Maven-3.6.3 kullanıldığında, yerel depo dizini göreli bir yol olarak çalışır (en azından MacOS'ta)
Ed Randall

8

Git için:

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

Bu, her git deposunda ayrı bir maven deposu kullanır


2

İşe yarayacak bir tür hileli yol şudur:

  1. <localRepository>${m2.localRepository}</localRepository>Settings.xml dosyanıza ekleyin
  2. Senin mvn.sh veya mvn.bat olarak, eklemek -Dm2.localRepository=<full path to home dir>/.m2/repository önce "$ @" işletilirse komuta. Bu, varsayılan yerel deponuzun olması gereken yerde kalmasını sağlayacaktır.
  3. Şimdi kullanabilirsiniz mvn -Dm2.localRepository=... <phases/goals>. Komut satırı sistem özelliğiniz, mvn betiğindekinden sonra komut satırına eklendiğinden, öncelikli olacaktır. (En azından hem Windows hem de linux üzerinde bu şekilde çalıştığından oldukça eminim, ancak testler söyleyecektir.)

Bu yardımcı olmadı, mvn betiğine "$ @" dan önce -Dm2.localRepository = "custom" ekledim, hala ~ / .m2 / repository kullanılıyor ... sonra da çalıştırırken -Dm2.localRepository = "custom" ekledim $ mvn, hala ~ / .m2 / repository kullanıyor ... sadece settings.xml'de localRepository öğesi olmadan, onu değiştirmenin bir yolu yok
lisak

@lisak: localRepository öğesini settings.xml dosyasına eklemenin 1. adımını yaptınız mı? Bunu test ettim ve işe yarıyor, ancak mvn komut dosyasında '~' takma adını gerçekten kullanamamanız dışında. Bunun üstesinden gelmek için muhtemelen başka bir kabuk / toplu komut dosyası hilesi yapabileceğiniz halde, mutlak bir yol koymalısınız.
Ryan Stewart

Çalışıyor, ancak gerçekten bir açıklamam yok ... $ M2_HOME / conf / settings.xml'de 2. adımı olmadan localRepository'yi açıklarsam, -s settings.xml tarafından geçersiz kılınır ve 2. adımda olsa da çalışmaz. işe yarıyor ... ama $ M2_HOME / conf / settings.xml'de localRepository olmadan sadece 2. adım çalışmıyor ... çalışması için her iki adım 1,2 de uygulanmalı ve hatta konumu daha sonra $ mvn ile değiştirebilirim -Dm2.localRepository = .. teşekkürler Ryan
lisak
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.