tutorial pom central java maven-2 repository

java - pom - ¿Cómo puedo hacer que Maven deje de intentar buscar actualizaciones de artefactos de cierto grupo de maven-central-repo?



maven tutorial (6)

Actualización: probablemente debería haber empezado con esto ya que sus proyectos son SNAPSHOT. Es parte de la semántica de SNAPSHOT que Maven verificará las actualizaciones en cada compilación. Ser un SNAPSHOT significa que es volátil y está sujeto a cambios, por lo que las actualizaciones deben verificarse. Sin embargo, vale la pena señalar que Maven super POM se configura de manera central para tener instantáneas desactivadas, por lo que Maven no debería buscar actualizaciones para SNAPSHOT en la central a menos que lo hayas anulado en tus propios pom / settings.

Puede configurar Maven para usar un mirror para el repositorio central, esto redirigirá todas las solicitudes que normalmente irían a la central de su repositorio interno.

En su settings.xml, debería agregar algo como esto para configurar su repositorio interno como mirror para central:

<mirrors> <mirror> <id>ibiblio.org</id> <name>ibiblio Mirror of http://repo1.maven.org/maven2/</name> <url>http://path/to/my/repository</url> <mirrorOf>central</mirrorOf> </mirror> </mirrors>

Si está utilizando un administrador de repositorio como Nexus para su repositorio interno. Puede configurar un repositorio proxy para la central proxy, de modo que cualquier solicitud que normalmente vaya a Central se envía a su repositorio proxy (o a un grupo de repositorio que contenga el proxy), y las solicitudes posteriores se guardan en caché en el administrador de repositorio interno. Incluso puede configurar el tiempo de espera de caché del proxy en -1, por lo que nunca solicitará contenidos de la central que ya estén en el repositorio de 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 no estén ya en el repositorio local. Esto puede ser anulado en la línea de comando cuando sea necesario usando el conmutador -U para forzar a Maven a buscar actualizaciones.

Debería configurar el repositorio (en su pom o un perfil en settings.xml) de la siguiente manera:

<repository> <id>central</id> <url>http://repo1.maven.org/maven2</url> <updatePolicy>never</updatePolicy> </repository>

Estoy trabajando en un proyecto Maven bastante grande. Probablemente tenemos aproximadamente unos 70 artefactos individuales, que se dividen aproximadamente en dos bibliotecas de código compartido y quizás diez aplicaciones que las utilizan. Todos estos elementos viven en el espacio de nombres com.mycompany.* .

La mayoría de las veces nos estamos ejecutando 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 repositorios públicos principales (maven-net-repo y java-net-repo) para las actualizaciones de todos los artefactos mycompany-*-SNAPSHOT.jar . Por supuesto, no se encuentran allí, y finalmente todo se resuelve con las versiones que acabo de construir en mi repositorio local, pero me gustaría que Maven deje de hacerlo porque (a) me hace sentir como una mala net.citizen para comprobar constantemente estos repositorios de cosas que nunca estarán allí, y (b) agrega algo de latencia de red innecesaria y molesta en mi proceso de compilación.

La mayor parte del tiempo me he dedicado a ejecutar maven en el modo fuera de línea para solucionar este problema, pero eso no es ideal ya que ocasionalmente se actualizará una dependencia en una biblioteca pública. Entonces, lo que estoy buscando es una solución que hará que Maven no compruebe si hay actualizaciones de repositorios para artefactos que cumplan ciertos criterios; en este caso, me alegraría si Maven ignorara las versiones de SNAPSHOT o los artefactos que estaban en el espacio de nombres com.mycompany .


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á una advertencia acerca de no poder obtener dependencias que ya no estén en su repositorio local, pero no es gran cosa.


Algo que ahora está disponible en maven también es

mvn goal --no-snapshot-updates

o en pocas palabras

mvn goal -nsu


La etiqueta updatePolicy no funcionó para mí. Sin embargo Rich Seller mencionó que las instantáneas deberían desactivarse de todos modos, así que miré más a fondo y noté que el repositorio adicional que agregué a mi settings.xml estaba causando el problema en realidad. Agregar la sección de instantáneas a este repositorio en mi settings.xml hizo el truco!

<repository> <id>jboss</id> <name>JBoss Repository</name> <url>http://repository.jboss.com/maven2</url> <snapshots> <enabled>false</enabled> </snapshots> </repository>


Muy simple :

En su Super POM parent o setting.xml, use

<repository> <id>central</id> <releases> <updatePolicy>never</updatePolicy> </releases> <snapshots> <updatePolicy>never</updatePolicy> </snapshots> <url>http://repo1.maven.org/maven2</url> <layout>legacy</layout> </repository>

Son mis consejos


Tuve algunos problemas similares a esto,

<repository> <id>java.net</id> <url>https://maven-repository.dev.java.net/nonav/repository</url> <layout>legacy</layout> </repository> <repository> <id>java.net2</id> <url>https://maven2-repository.dev.java.net/nonav/repository</url> </repository>

Establecer el updatePolicy a "nunca" no funcionó. La eliminación de estos repos fue la forma en que lo resolvió. ps: estaba siguiendo este tutorial sobre servicios web (por cierto, probablemente el mejor tutorial para ws para java)