Estoy usando Maven 3.3.3 con Java 8 en Mac Yosemite. Tengo un proyecto de varios módulos.
<modules>
<module>first-module</module>
<module>my-module</module>
…
</modules>
Cuando construyo uno de mis módulos secundarios, por ejemplo, "my-module" desde arriba, usando "mvn clean install", la construcción intenta descargar los artefactos del módulo secundario desde un repositorio remoto que he definido en mi ~ / .m2 Archivo /settings.xml. La salida está debajo
[INFO]
[INFO] ------------------------------------------------------------------------
[INFO] Building my-module 87.0.0-SNAPSHOT
[INFO] ------------------------------------------------------------------------
Downloading: https://my.remoterepository.com/nexus/content/repositories/snapshots/org/mainco/subco/first-module/87.0.0-SNAPSHOT/maven-metadata.xml
Downloading: http://download.java.net/maven/2/org/mainco/subco/first-module/87.0.0-SNAPSHOT/maven-metadata.xml
Downloaded: https://my.remoterepository.com/nexus/content/repositories/snapshots/org/mainco/subco/first-module/87.0.0-SNAPSHOT/maven-metadata.xml (788 B at 0.9 KB/sec)
Downloading: https://my.remoterepository.com/nexus/content/repositories/snapshots/org/mainco/subco/first-module/87.0.0-SNAPSHOT/first-module-87.0.0-20151104.200545-4.pom
¿Cómo obligo a Maven a verificar mi repositorio ~ / .m2 / local antes de intentar descargar desde los repositorios remotos? A continuación es donde tengo mis repositorios remotos definidos en mi archivo ~ / .m2 / settings.xml ...
<profile>
<id>releases</id>
<activation>
<property>
<name>!releases.off</name>
</property>
</activation>
<repositories>
<repository>
<id>releases</id>
<url>https://my.remoterepository.com/nexus/content/repositories/releases/</url>
<releases>
<enabled>true</enabled>
</releases>
<snapshots>
<enabled>false</enabled>
</snapshots>
</repository>
</repositories>
</profile>
<profile>
<id>snapshots</id>
<activation>
<property>
<name>!snapshots.off</name>
</property>
</activation>
<repositories>
<repository>
<id>snapshots</id>
<url>https://my.remoterepository.com/nexus/content/repositories/snapshots/</url>
<releases>
<enabled>false</enabled>
</releases>
<snapshots>
<enabled>true</enabled>
</snapshots>
</repository>
</repositories>
</profile>
Editar: en respuesta a la respuesta que dice que la descarga se produce cuando el artefacto no está allí, a continuación se muestra la salida del terminal en la que pruebo que el archivo estaba allí en mi repositorio, pero Maven está tratando de descargarlo de todos modos ...
Daves-MacBook-Pro-2:my-module davea$ ls -al ~/.m2/repository/org/mainco/subco/first-module/87.0.0-SNAPSHOT/first-module-87.0.0-SNAPSHOT.jar
-rw-r--r-- 1 davea staff 10171 Nov 5 10:22 /Users/davea/.m2/repository/org/mainco/subco/first-module/87.0.0-SNAPSHOT/first-module-87.0.0-SNAPSHOT.jar
Daves-MacBook-Pro-2:my-module davea$ mvn clean install
[INFO] Scanning for projects...
[WARNING]
[WARNING] Some problems were encountered while building the effective model for org.mainco.subco:my-module:jar:87.0.0-SNAPSHOT
[WARNING] 'build.plugins.plugin.(groupId:artifactId)' must be unique but found duplicate declaration of plugin org.apache.maven.plugins:maven-antrun-plugin @ org.mainco.subco:my-module:[unknown-version], /Users/davea/Documents/sb_workspace/my-module/pom.xml, line 678, column 12
[WARNING]
[WARNING] It is highly recommended to fix these problems because they threaten the stability of your build.
[WARNING]
[WARNING] For this reason, future Maven versions might no longer support building such malformed projects.
[WARNING]
[INFO]
[INFO] ------------------------------------------------------------------------
[INFO] Building my-module 87.0.0-SNAPSHOT
[INFO] ------------------------------------------------------------------------
Downloading: https://my.remoterepository.com/nexus/content/repositories/snapshots/org/mainco/subco/first-module/87.0.0-SNAPSHOT/maven-metadata.xml
Downloading: http://download.java.net/maven/2/org/mainco/subco/first-module/87.0.0-SNAPSHOT/maven-metadata.xml
Downloaded: https://my.remoterepository.com/nexus/content/repositories/snapshots/org/mainco/subco/first-module/87.0.0-SNAPSHOT/maven-metadata.xml (788 B at 0.8 KB/sec)
Downloading: https://my.remoterepository.com/nexus/content/repositories/snapshots/org/mainco/subco/first-module/87.0.0-SNAPSHOT/first-module-87.0.0-20151106.043202-8.pom
Downloaded: https://my.remoterepository.com/nexus/content/repositories/snapshots/org/mainco/subco/first-module/87.0.0-SNAPSHOT/first- module-87.0.0-20151106.043202-8.pom (3 KB at 21.9 KB/sec)
Downloading: http://download.java.net/maven/2/org/mainco/subco/subco/87.0.0-SNAPSHOT/maven-metadata.xml
Downloading: https://my.remoterepository.com/nexus/content/repositories/snapshots/org/mainco/subco/subco/87.0.0-SNAPSHOT/maven-metadata.xml
settings.xml
(ver aquí ).Respuestas:
La dependencia tiene una versión instantánea. Para las instantáneas, Maven verificará el repositorio local y si el artefacto encontrado en el repositorio local es demasiado antiguo, intentará encontrar uno actualizado en los repositorios remotos. Eso es probablemente lo que estás viendo.
Tenga en cuenta que este comportamiento está controlado por la
updatePolicy
directiva en la configuración del repositorio (que esdaily
por defecto para los repositorios de instantáneas).fuente
Utilice
mvn --help
y podrá ver la lista de opciones.Hay una opción como
-nsu,--no-snapshot-updates Suppress SNAPSHOT updates
Entonces use command
mvn install -nsu
puede forzar la compilación con el repositorio local.fuente
-o
para el comportamiento experto "sin conexión"Para forzar realmente a maven a usar solo su repositorio local, puede ejecutar con
mvn <goals> -o
. El-o
le dice a Maven que le permita trabajar "sin conexión" y permanecerá fuera de la red.fuente
mvn dependency:go-offline
En mi caso tuve un proyecto de varios módulos como tú. Tuve que cambiar un ID de grupo de una de las bibliotecas externas de las que dependía mi proyecto, como se muestra a continuación.
De:
A:
Preste atención a la sección <groupId>. Resultó que me estaba olvidando de modificar la sección correspondiente de los submódulos que definen esta dependencia en sus archivos pom.
Me volvió loco porque el módulo estaba disponible localmente.
fuente
Siga los pasos a continuación:
Por ejemplo, archivos como .repositories, .pom, .sha1, .lastUpdated, etc.
mvn clean install -o
comandoEsto ayudará a utilizar archivos jar del repositorio local en lugar de conectarse a cualquier repositorio.
fuente
*.repositories
y*.sha1
meLa opción -o no funcionó para mí porque el artefacto todavía está en desarrollo y aún no se ha cargado y maven (3.5.x) todavía intenta descargarlo del repositorio remoto porque es la primera vez, según el error que recibo.
Sin embargo, esto lo arregló para mí: https://maven.apache.org/general.html#importing-jars
Después de esta instalación manual, tampoco es necesario utilizar la opción sin conexión.
ACTUALIZAR
Acabo de reconstruir la dependencia y tuve que volver a importarla: lo normal
mvn clean install
no era suficiente para mífuente
Maven siempre verifica primero su repositorio local, sin embargo, su dependencia debe estar instalada en su repositorio para que Maven la encuentre.
Ejecute
mvn install
primero su módulo de dependencia y luego cree su módulo dependiente.fuente