2011-07-25 25 views
82

¿Es posible establecer la ubicación del repositorio Maven local como argumento en la línea de comandos de Maven?Especificación de la ubicación del repositorio local de Maven como parámetro CLI

El problema es que no utilizo el predeterminado en ~/.m2/repository. Sin embargo, revisé algún proyecto que se está construyendo con su propia configuración con -s settings.xml. Settings.xml que no especifica mi repositorio local, por lo Maven utiliza usos ~/.m2/repository de nuevo ... Me gustaría utilizar una ubicación repositorio local no predeterminado sin tener que añadir un elemento <localRepository> 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 estar modificando una tercera parte o settings.xml mover mi repo local para ~

+0

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

Respuesta

168

uso de la propiedad experto maven.repo.local:

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

No hay modificaciones a Settings.xml son necesarios.

+1

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

+0

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

2

Una especie de manera hacky que funcionaría es:

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

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

+0

@lisak: ¿Hizo el paso 1 de agregar el elemento localRepository a settings.xml? Probé esto, y funciona, excepto que no se puede usar el alias '~' en el script mvn. Tienes que poner una ruta absoluta, aunque probablemente puedas hacer algún otro truco de script de shell/batch para evitar eso. –

+0

Funciona, pero realmente no tengo ninguna explicación ... Si declaro localRepository en $ M2_HOME/conf/settings.xml sin el paso 2, es reemplazado 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. .deben aplicarse ambos pasos 1,2 para que funcione e incluso puedo cambiar la ubicación a través de $ mvn -Dm2.localRepository = .. gracias Ryan – lisak

1

Para git:

alias mvn='mvn -Dmaven.repo.local=`git rev-parse --show-toplevel`/.m2/repository' 

Este utiliza un repositorio experto independiente en cada repositorio git

Cuestiones relacionadas