Especificar la ubicación del repositorio local de Maven como un parámetro CLI


131

¿Es posible establecer la ubicación del repositorio local de Maven como argumento en la línea de comando de Maven?

La cosa es que no uso el predeterminado en ~/.m2/repository. Sin embargo, revisé algunos proyectos que se están construyendo con su propia configuración -s settings.xml. Ese settings.xml no especifica mi repositorio local, por lo que Maven usa usos ~/.m2/repositorynuevamente ... Me gustaría usar una ubicación de repositorio local no predeterminada sin tener que agregar un <localRepository>elemento en settings.xml del proyecto

He intentado

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

pero ninguna de estas opciones funciona.

Así que creo que tengo que decidir si voy a modificar la configuración de un tercero.xml o mover mi repositorio local a ~


Obviamente, esto no es tu culpa, pero los proyectos de Maven no deberían proporcionar un settings.xml. Ver maven.apache.org/guides/mini/guide-configuring-maven.html
oberlies

Respuestas:


258

usar propiedad maven maven.repo.local:

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

No hay modificaciones settings.xmlnecesarias.


10
El repositorio local debe ser una ruta absoluta, maven.apache.org/guides/mini/guide-configuring-maven.html .
luka5z

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

¿Puedo establecer una variable de entorno para lograr lo mismo?
polvo366

@ powder366 no, AFAIK
Petr Kozelka

Usando maven-3.6.3, el directorio de repositorio local funciona como una ruta relativa (al menos en MacOS)
Ed Randall

8

Para git:

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

Esto usa un repositorio maven separado en cada repositorio git


2

Una forma hacky que funcionaría es:

  1. Agregar <localRepository>${m2.localRepository}</localRepository>a tu settings.xml
  2. En su mvn.sh o mvn.bat, agregue -Dm2.localRepository=<full path to home dir>/.m2/repository antes de "$ @" en el comando que se ejecuta. Esto hará que su repositorio local predeterminado permanezca donde debería estar.
  3. Ahora puedes usar mvn -Dm2.localRepository=... <phases/goals>. Debido a que la propiedad del sistema de línea de comando se agrega a la línea de comando después de la del script mvn, tendrá prioridad. (Al menos estoy bastante seguro de que funciona de esa manera tanto en Windows como en Linux, pero las pruebas lo dirán).

Eso no ayuda, agregué -Dm2.localRepository = "custom" antes de "$ @" en el script mvn, todavía usa ~ / .m2 / repository ... luego también incluí -Dm2.localRepository = "custom" cuando ejecuté $ mvn, todavía usa ~ / .m2 / repository ... simplemente sin el elemento localRepository en settings.xml, no hay forma de cambiarlo
lisak

@lisak: ¿Hiciste el paso 1 de agregar el elemento localRepository a settings.xml? Probé esto, y funciona, excepto que en realidad no puedes usar el alias '~' en el script mvn. Tiene que poner una ruta absoluta, aunque probablemente podría hacer algún otro truco de script de shell / lote para evitar eso.
Ryan Stewart

Funciona, pero realmente no tengo explicación ... Si declaro localRepository en $ M2_HOME / conf / settings.xml sin el paso 2, se anula por -s settings.xml y no funciona, aunque con el paso 2 funciona ... pero solo el paso 2 sin localRepository en $ M2_HOME / conf / settings.xml no funciona ... ambos pasos 1,2 deben aplicarse para que funcione e incluso puedo cambiar la ubicación a través de $ mvn -Dm2.localRepository = .. gracias Ryan
lisak
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.