¿Maven requiere una conexión a Internet en algún momento para poder usarlo? ¿Significa específicamente obtener los complementos internos de maven para compilar, limpiar, empaquetar, etc.?
¿Maven requiere una conexión a Internet en algún momento para poder usarlo? ¿Significa específicamente obtener los complementos internos de maven para compilar, limpiar, empaquetar, etc.?
Respuestas:
Puede ejecutar maven en modo fuera de línea mvn -o install
. Por supuesto, fallarán los artefactos que no estén disponibles en su repositorio local. Maven no se basa en repositorios distribuidos, pero ciertamente hacen que las cosas sean más fluidas. Es por esta razón que muchas tiendas usan espejos internos que se sincronizan gradualmente con los repositorios centrales.
Además, mvn dependency:go-offline
se puede utilizar para asegurarse de que tiene todas sus dependencias instaladas localmente antes de comenzar a trabajar sin conexión.
mvn dependency:go-offline
simplemente no atrapa todo. Dentro de una nueva máquina virtual, por ejemplo, mi proyecto aún debe descargar cosas incluso después de ejecutar este objetivo. Consulte también este número .
Si tiene una PC con acceso a Internet en su LAN, debe instalar un repositorio local de Maven.
Recomiendo Artifactory Open Source . Esto es lo que usamos en nuestra organización, es realmente fácil de configurar.
Artifactory actúa como un proxy entre su herramienta de construcción (Maven, Ant, Ivy, Gradle, etc.) y el mundo exterior.
Almacena en caché los artefactos remotos para que no tenga que descargarlos una y otra vez.
Bloquea las solicitudes externas no deseadas (y a veces sensibles a la seguridad) de artefactos internos y controla cómo y dónde se implementan los artefactos y por quién.
Después de configurar Artifactory, solo necesita cambiar Maven settings.xml
en las máquinas de desarrollo:
<?xml version="1.0" encoding="UTF-8"?>
<settings xsi:schemaLocation="http://maven.apache.org/SETTINGS/1.0.0 http://maven.apache.org/xsd/settings-1.0.0.xsd" xmlns="http://maven.apache.org/SETTINGS/1.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<mirrors>
<mirror>
<mirrorOf>*</mirrorOf>
<name>repo</name>
<url>http://maven.yourorganization.com:8081/artifactory/repo</url>
<id>repo</id>
</mirror>
</mirrors>
<profiles>
<profile>
<repositories>
<repository>
<snapshots>
<enabled>false</enabled>
</snapshots>
<id>central</id>
<name>libs-release</name>
<url>http://maven.yourorganization.com:8081/artifactory/libs-release</url>
</repository>
<repository>
<snapshots />
<id>snapshots</id>
<name>libs-snapshot</name>
<url>http://maven.yourorganization.com:8081/artifactory/libs-snapshot</url>
</repository>
</repositories>
<pluginRepositories>
<pluginRepository>
<snapshots>
<enabled>false</enabled>
</snapshots>
<id>central</id>
<name>plugins-release</name>
<url>http://maven.yourorganization.com:8081/artifactory/plugins-release</url>
</pluginRepository>
<pluginRepository>
<snapshots />
<id>snapshots</id>
<name>plugins-snapshot</name>
<url>http://maven.yourorganization.com:8081/artifactory/plugins-snapshot</url>
</pluginRepository>
</pluginRepositories>
<id>artifactory</id>
</profile>
</profiles>
<activeProfiles>
<activeProfile>artifactory</activeProfile>
</activeProfiles>
</settings>
Usamos esta solución porque tuvimos problemas con el acceso a Internet en nuestras máquinas de desarrollo y algunos artefactos descargaron archivos corruptos o no se descargaron en absoluto. No hemos tenido problemas desde entonces.
Tienes dos opciones para esto:
1.) realice cambios en settings.xml agregue esto en la primera etiqueta
<localRepository>C:/Users/admin/.m2/repository</localRepository>
2.) use la etiqueta -o para el comando fuera de línea.
mvn -o clean install -DskipTests=true
mvn -o jetty:run
Maven necesita las dependencias en su repositorio local. La forma más fácil de obtenerlos es con acceso a Internet (o más difícil usando otras soluciones proporcionadas aquí).
Entonces, asumiendo que puede obtener acceso a Internet temporalmente, puede prepararse para desconectarse utilizando el complemento maven-dependency-plugin con su dependencia: objetivo de desconexión . Esto descargará todas las dependencias de su proyecto en su repositorio local (por supuesto, los cambios en las dependencias / complementos requerirán un nuevo acceso a Internet / repositorio central).
Lamentablemente,
dependency:go-offline
no me ha funcionado, ya que no guardó todo en caché, es decir. Los archivos POM y otros implícitamente mencionan dependencias.
La solución ha sido especificar una ubicación de repositorio local , ya sea dentro del settings.xml
archivo con <localRepository>...</localRepository>
o ejecutándose mvn
con el -Dmaven.repo.local=...
parámetro. Después de la construcción inicial del proyecto, todos los artefactos necesarios deben almacenarse en caché, y luego puede hacer referencia a la ubicación del repositorio de la misma manera, mientras ejecuta la compilación de Maven en modo fuera de línea ( mvn -o ...
).
Antes de desconectarse, debe asegurarse de que todo esté en su repositorio local, lo cual es necesario para trabajar sin conexión. Ejecutar "mvn dependency: go-offline" para el (los) proyecto (s) / pom (s), en el que desea trabajar, reducirá los esfuerzos para lograrlo.
Pero generalmente no es toda la historia, porque la dependencia: go-offline solo descargará los complementos de "compilación básica" ( go-offline / resolve-plugins no resuelve todas las dependencias de los complementos ). Por lo tanto, debe encontrar una manera de descargar los complementos de implementación / prueba / sitio (y tal vez otros) y sus dependencias en su repositorio.
Además, dependency: go-offline no descarga el artefacto pom en sí, por lo que tienes que depender: cópialo si es necesario.
A veces, como escribió MaDa, no sabe lo que necesitará mientras está desconectado, lo que hace que sea bastante imposible tener un repositorio "suficiente".
De todos modos, al tener un repositorio correctamente llenado, solo tiene que agregar "<offline> true </offline>" al archivo settings.xml de Maven para desconectarse.
No cambie el perfil (id) de Maven que utilizó para completar su repositorio, mientras estaba desconectado. Maven reconoce los artefactos descargados en sus metadatos con una "identidad", que está vinculada a la identificación del perfil.
Si está utilizando IntelliJ, simplemente puede ir a Preferencias -> Compilación, ejecución, implementación -> Herramientas de compilación -> Maven y marcar / desmarcar Trabajar sin conexión .
¿Esto funciona para tí?
http://jojovedder.blogspot.com/2009/04/running-maven-offline-using-local.html
No olvide agregarlo a su repositorio de complementos y apunte la URL a donde sea que esté su repositorio.
<repositories>
<repository>
<id>local</id>
<url>file://D:\mavenrepo</url>
</repository>
</repositories>
<pluginRepositories>
<pluginRepository>
<id>local</id>
<url>file://D:\mavenrepo</url>
</pluginRepository>
</pluginRepositories>
De lo contrario, es posible que deba ejecutar un servidor local, por ejemplo, apache, en sus máquinas.
(fuente: jfrog.com )
o
Simplemente use los servidores de repositorio de Maven como Sonatype Nexus http://www.sonatype.org/nexus/ o JFrog Artifactory https://www.jfrog.com/artifactory/ .
Una vez que un desarrollador construye un proyecto, la compilación de los siguientes desarrolladores o Jenkins CI no requerirá acceso a Internet.
El servidor de repositorio de Maven también puede tener proxies configurados para acceder a Maven Central (o repositorios públicos más necesarios), y pueden tener una lista de artefactos en repositorios remotos.
Mi experiencia muestra que la opción -o no funciona correctamente y que el objetivo de desconectarse está lejos de ser suficiente para permitir una compilación completa sin conexión:
La solución que pude validar incluye el uso de la --legacy-local-repository
opción maven en lugar de la -o
(sin conexión) y el uso del repositorio local en lugar del repositorio de distribución
Además, tuve que copiar todos los maven-metadata-maven2_central.xml
archivos del repositorio local en la maven-metadata.xml
forma esperada por maven.
Vea la solución que encontré aquí .
Responder a su pregunta directamente: no requiere una conexión a Internet, sino acceso a un repositorio, en LAN o disco local (use sugerencias de otras personas que publicaron aquí).
Si su proyecto no está en una fase madura, eso significa que cuando los POM se cambian con bastante frecuencia, el modo fuera de línea será muy poco práctico, ya que también tendrá que actualizar su repositorio con bastante frecuencia. A menos que pueda obtener una copia de un repositorio que tenga todo lo que necesita, pero ¿cómo lo sabría? Por lo general, inicia un repositorio desde cero y se clona gradualmente durante el desarrollo (en una computadora conectada a otro repositorio). Una copia del repositorio público repo1.maven.org pesa cientos de gigabytes, por lo que tampoco recomendaría la fuerza bruta.
Apareció un nuevo complemento para corregir las deficiencias de mvn dependency:go-offline
:
https://github.com/qaware/go-offline-maven-plugin
Agréguelo en su pom, luego ejecute mvn -T1C de.qaware.maven:go-offline-maven-plugin:resolve-dependencies
. Una vez que haya configurado todas las dependencias dinámicas, maven no intentará descargar nada nuevamente (hasta que actualice las versiones).
<offline> false </offline>
<localRepository>${user.home}/.m2/repository</localRepository>
a
<offline> true <offline>
<localRepository>${user.home}/.m2/repository</localRepository>
Cambie la etiqueta offline de falso a verdadero.
se descargará desde el repositorio en línea