pom maven2 central maven-2 repository

maven 2 - maven2 - Maven: instalación de artefactos en un repositorio local en el área de trabajo



maven repository pom (4)

Me gustaría tener una forma en la que ''mvn install'' coloque los archivos en una carpeta de repositorio bajo mi raíz de origen (de pago), mientras usa las dependencias de terceros de ~ / .m2 / repository.

Así que después de ''mvn install'', el diseño es:

/work/project/ repository com/example/foo-1.0.jar com/example/bar-1.0.jar foo src/main/java bar src/main/java ~/.m2/repository log4j/log4j/1.2/log4j-1.2.jar

(En particular, / work / project / repository no contiene log4j)

En esencia, estoy buscando una manera de crear un repositorio compuesto que haga referencia a otros repositorios

Mi intención es poder tener múltiples desprotecciones del mismo origen y trabajar en cada una sin sobrescribirnos en el repositorio local con ''instalar''. Las comprobaciones múltiples pueden deberse al trabajo en diferentes ramas en cvs / svn, pero en mi caso se debe a la clonación de la rama maestra en git (en git, cada clon es como una rama). No me gustan las alternativas que son usar una versión / clasificador especial por pago o reinstalar (reconstruir) todo cada vez que cambio.


Esto es INDEED posible con la línea de comando, y de hecho es bastante útil. Por ejemplo, si desea crear un repositorio adicional en su proyecto de Eclipse, simplemente haga lo siguiente:

mvn install:install-file -DlocalRepositoryPath=repo / -DcreateChecksum=true -Dpackaging=jar / -Dfile=%2 -DgroupId=%3 -DartifactId=%4 -Dversion=%5

Es el parámetro "localRepositoryPath" que dirigirá su instalación a cualquier repositorio local que desee.

Tengo esto en un archivo por lotes que ejecuto desde la raíz de mi proyecto, e instala el archivo en un directorio "repo" dentro de mi proyecto (de ahí los parámetros%). Entonces, ¿por qué quieres hacer esto? Bueno, digamos que usted es un consultor de servicios profesionales y que regularmente va a ubicaciones de clientes donde se ve obligado a usar sus computadoras portátiles reforzadas con seguridad. Copias tu proyecto autónomo a su computadora portátil desde una memoria USB, y listo, puedes hacer que tu experto construya sin problemas.

En general, si está utilizando SU computadora portátil, entonces tiene sentido tener un único repositorio local que tenga todo lo que contiene. Pero para ti que te pusiste engreído y dijiste cosas como "por qué querrías hacer eso", tengo algunas noticias ... el mundo es un lugar más grande con más opciones de las que podrías imaginar. Si está usando computadoras portátiles que NO son suyas y necesita construir su proyecto en esa computadora, obtener el artefacto resultante y luego eliminar el directorio de su proyecto (y el repositorio local que acaba de usar), esta es la manera de hacerlo.

En cuanto a por qué querría tener 2 repositorios locales, el repositorio predeterminado .m2 es donde van las cosas estándar de las compañías, y el repositorio local "en proyecto" es donde TU cosas van.


Esto no es posible con el cliente de línea de comandos, pero puede crear diseños de repositorio más complejos con un servidor de repositorio Maven como Nexus .

La razón por la que no es posible es que Maven permite anidar proyectos y la mayoría de ellos se referirán entre sí, por lo que la instalación de cada artefacto en un repositorio diferente llevaría a muchas búsquedas en su disco duro local (o a compilaciones fallidas al iniciar un construir en un subproyecto).


FYI: los enlaces simbólicos funcionan en Windows7 y superiores, por lo que este tipo de cosas es fácil de lograr si todo su código va en el mismo lugar en el repositorio local, es decir, / com / myco /.

escriba mklink para detalles


Maven puede buscar en múltiples repositorios (local, remoto, "falso" remoto) para resolver dependencias, pero solo hay UN repositorio local donde se instalan los artefactos durante la install . Sería una verdadera pesadilla instalar artefactos en ubicaciones específicas y mantener esta lista sin romper nada, eso simplemente no funcionaría, no quiere hacer esto.

Pero, TBH, no entiendo el punto. Entonces, ¿por qué quieres hacer esto? Puede haber soluciones alternativas y mucho más simples, como instalar sus artefactos en el repositorio local y luego copiarlos en la raíz de su proyecto. ¿Por qué no funcionaría esto? Aunque realmente me gustaría saber la intención final.

ACTUALIZACIÓN: Habiendo leído la actualización de la pregunta inicial, la única solución que se me ocurre (dado que no desea usar diferentes versiones / etiquetas) sería usar dos repositorios locales y cambiar entre ellos (aunque muy propensos a errores) ).

Para hacerlo, use diferentes cuentas de usuario (ya que el repositorio local es específico del usuario de manera predeterminada).

O actualice su ~/.m2/settings.xml cada vez que desee cambiar:

<settings xmlns="http://maven.apache.org/SETTINGS/1.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/SETTINGS/1.0.0 http://maven.apache.org/xsd/settings-1.0.0.xsd"> <localRepository>${user.home}/.m2/repository</localRepository> <!--localRepository>${user.home}/.m2/repository2</localRepository--> ... </settings>

O tenga otro settings.xml y apunte en él usando la opción --settings :

mvn install --settings /path/to/alternate/settings.xml

O especifique la ubicación alternativa en la línea de comando usando la opción -Dmaven.repo.local :

mvn -Dmaven.repo.local=/path/to/repo

Estas soluciones son todas propensas a errores como dije y ninguna de ellas es muy satisfactoria. Aunque tenga muy buenas razones para trabajar en varias sucursales en paralelo, su caso de uso (no la reconstrucción de todo) no es muy común. Aquí, el uso de cuentas de usuario distintas puede ser la solución IMO, que es peor.