Especificando a localização do repositório local do Maven como um parâmetro da CLI


131

É possível definir o local do repositório local do Maven como argumento na linha de comando do Maven?

O problema é que eu não uso o padrão ~/.m2/repository. No entanto, verifiquei algum projeto que está sendo construído com suas próprias configurações -s settings.xml. Como o settings.xml não especifica meu repositório local, o Maven usa os usos ~/.m2/repositorynovamente ... Gostaria de usar um local não padrão do repositório local sem precisar adicionar um <localRepository>elemento no settings.xml do projeto

eu tentei

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

mas nenhuma dessas opções funciona.

Acho que tenho que decidir se modificarei o settings.xml de terceiros ou moverei meu repositório local para ~


Obviamente, isso não é culpa sua, mas os projetos do Maven não devem fornecer settings.xml. Veja maven.apache.org/guides/mini/guide-configuring-maven.html
Oberlies

Respostas:


258

use propriedade maven maven.repo.local:

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

Nenhuma modificação settings.xmlé necessária.


10
O repositório local deve ser um caminho absoluto, maven.apache.org/guides/mini/guide-configuring-maven.html .
luka5z

3
No Windows, use `mvn -D" maven.repo.local "=% USER_HOME% /. My / other / repository clean
install`

Posso definir uma variável de ambiente para obter a mesma coisa?
powder366

@ powder366 não, AFAIK
Petr Kozelka

Usando o maven-3.6.3, o diretório do repositório local funciona como um caminho relativo (pelo menos no MacOS)
Ed Randall

8

Para git:

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

Isso usa um repositório maven separado em cada repositório git


2

Um tipo de maneira hacky que funcionaria é:

  1. Adicione <localRepository>${m2.localRepository}</localRepository>às suas configurações.xml
  2. No seu mvn.sh ou mvn.bat, adicione -Dm2.localRepository=<full path to home dir>/.m2/repository antes do "$ @" no comando que é executado. Isso fará com que seu repositório local padrão permaneça onde deveria estar.
  3. Agora você pode usar mvn -Dm2.localRepository=... <phases/goals>. Como a propriedade do sistema de linha de comando é adicionada à linha de comando após a do script mvn, ela terá precedência. (Pelo menos, tenho certeza de que funciona dessa maneira no Windows e no Linux, mas o teste dirá.)

Isso não ajuda, adicionei -Dm2.localRepository = "custom" antes de "$ @" no script mvn, ainda usa ~ / .m2 / repository ... então eu também incluí -Dm2.localRepository = "custom" ao executar $ mvn, ainda usa ~ / .m2 / repositório ... simplesmente sem elemento localRepository na settings.xml, não há nenhuma maneira de mudar isso
lisak

@lisak: Você fez o passo 1 de adicionar o elemento localRepository ao settings.xml? Eu testei isso e funciona, exceto que você não pode realmente usar o alias '~' no script mvn. Você precisa colocar um caminho absoluto, embora provavelmente possa fazer outros truques de shell / lote para contornar isso.
Ryan Stewart

Funciona, mas realmente não tenho explicação ... Se eu declarar localRepository em $ M2_HOME / conf / settings.xml sem a etapa 2, ele será substituído por -s settings.xml e não funcionará, embora na etapa 2 funciona ... mas apenas a etapa 2 sem localRepository em $ M2_HOME / conf / settings.xml não funciona ... as duas etapas 1,2 devem ser aplicadas para que funcione e eu posso alterar o local até $ mvn -Dm2.localRepository = .. obrigado Ryan
lisak
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.