Estoy trabajando en un proyecto Maven bastante grande. Probablemente tenemos alrededor de 70 artefactos individuales, que se dividen aproximadamente en dos bibliotecas de código compartido y tal vez diez aplicaciones que los usan. Todos estos elementos viven en el espacio de nombres com.mycompany.*
.
La mayoría de las veces corremos contra compilaciones de instantáneas. Entonces, para hacer una compilación completa de una aplicación, primero podría compilar los proyectos de la biblioteca para que se instalen en mi repositorio local (como, por ejemplo mycompany-libname-2.4-SNAPSHOT.jar
).
El problema es que cuando voy a construir las aplicaciones. Por alguna razón, Maven quiere verificar los dos principales repositorios públicos (maven-net-repo y java-net-repo) para ver las actualizaciones de todos los mycompany-*-SNAPSHOT.jar
artefactos. Por supuesto, no se encuentran allí, y todo finalmente se resuelve a las versiones que acabo de construir en mi repositorio local, pero me gustaría que Maven dejara de hacerlo porque (a) me hace sentir como un mal ciudadano neto. por revisar constantemente estos repositorios en busca de cosas que nunca estarán allí, y (b) agrega latencia de red innecesaria y molesta a mi proceso de compilación.
La mayoría de las veces he estado ejecutando Maven en modo fuera de línea para solucionar este problema, pero eso no es ideal ya que ocasionalmente se actualizará una dependencia de una biblioteca pública. Entonces, lo que estoy buscando es una solución que haga que Maven no busque actualizaciones de los repositorios dados para artefactos que cumplan con ciertos criterios; en este caso, estaría feliz si Maven ignorara las versiones SNAPSHOT o los artefactos que estaban en El com.mycompany
espacio de nombres.
fuente
Además, puede usar
-o
o--offline
en la línea de comando mvn que pondrá a maven en "modo fuera de línea" para que no busque actualizaciones. Recibirá algunas advertencias sobre no poder obtener dependencias que aún no están en su repositorio local, pero no es gran cosa.fuente
Algo que ahora también está disponible en Maven es
o en resumen
fuente
set offline := true
en la sesión ooffline := true
enbuild.sbt
.nsu
opción está rota en v 3.0.3 (Ver MNG-5064 ). Para usar esta opción de manera confiable, es posible que deba actualizar a al menos v. 3.0.4 o v. 3.0.5Actualización: Probablemente debería haber comenzado con esto ya que sus proyectos son INSTANTÁNEOS. Es parte de la semántica SNAPSHOT que Maven buscará actualizaciones en cada compilación. Ser SNAPSHOT significa que es volátil y está sujeto a cambios, por lo que se deben verificar las actualizaciones. Sin embargo, vale la pena señalar que el super POM de Maven configura central para tener las instantáneas deshabilitadas, por lo que Maven nunca debería buscar actualizaciones para SNAPSHOT en central a menos que haya anulado eso en su propio pom / configuración.
Puede configurar Maven para usar un espejo para el repositorio central, esto redirigirá todas las solicitudes que normalmente irían a la central a su repositorio interno.
En su settings.xml agregaría algo como esto para configurar su repositorio interno como espejo para central:
Si está utilizando un administrador de repositorio como Nexus para su repositorio interno. Puede configurar un repositorio de proxy para proxy central, de modo que las solicitudes que normalmente irían a Central se envían a su repositorio de proxy (o un grupo de repositorio que contiene el proxy), y las solicitudes posteriores se almacenan en caché en el administrador de repositorio interno. Incluso puede establecer el tiempo de espera de la caché del proxy en -1, por lo que nunca solicitará contenido de la central que ya está en el repositorio del proxy.
Una solución más básica si solo está trabajando con repositorios locales es establecer updatePolicy para el repositorio central en "nunca", esto significa que Maven solo buscará artefactos que aún no estén en el repositorio local. Esto puede anularse en la línea de comando cuando sea necesario utilizando el interruptor -U para forzar a Maven a buscar actualizaciones.
Configuraría el repositorio (en su pom o un perfil en settings.xml) de la siguiente manera:
fuente
updatePolicy
elemento va debajo del elementosnapshots
oreleases
. Ver: maven.apache.org/settings.htmlMuy simple :
En su Super POM parent o setting.xml, use
Son mis consejos
fuente
Tuve algunos problemas similares a este,
Establecer updatePolicy en "nunca" no funcionó. Eliminar estos repositorios fue la forma en que lo resolví. ps: estaba siguiendo este tutorial sobre servicios web (por cierto, probablemente el mejor tutorial para ws para java)
fuente