java - pom - maven programming
¿Por qué Maven descarga el maven-metadata.xml todo el tiempo? (4)
A continuación se muestra el error que generalmente tengo cuando mi conexión a Internet es franca cuando intento construir una aplicación web con maven.
Mi pregunta es, ¿por qué maven siempre tiene que descargar cada vez que se ha creado la misma aplicación antes?
¿Qué podría estar mal en mi configuración que hace que Maven descargue todo el tiempo?
A continuación se muestra un error que recibo cuando intento construir sin conexión:
[INFO] ------------------------------------------------------------------------
[INFO] Building mywebapp 1.0-SNAPSHOT
[INFO] ------------------------------------------------------------------------
Downloading: https://raw.github.com/pagecrumb/mungo/mvn-repo/com/pagecrumb/mungo/0.0.1-SNAPSHOT/maven-metadata.xml
[WARNING] Could not transfer metadata com.mywebapp:mungo:0.0.1-SNAPSHOT/maven-metadata.xml
from/to mungo-mvn-repo (https://raw.github.com/pagecrumb/mungo/mvn-repo/): raw.github.com
[INFO]
[INFO] --- maven-war-plugin:2.1.1:war (default-cli) @ mywebapp ---
[INFO] Packaging webapp
[INFO] Assembling webapp [mywebapp] in [D:/workspace/web/target/mywebapp-1.0-SNAPSHOT]
[INFO] Processing war project
[INFO] Copying webapp resources [D:/workspace/web/src/main/webapp]
[INFO] Webapp assembled in [1237 msecs]
[INFO] Building war: D:/workspace/web/target/mywebapp-1.0-SNAPSHOT.war
[WARNING] Warning: selected war files include a WEB-INF/web.xml which will be ignored
(webxml attribute is missing from war task,
or ignoreWebxml attribute is specified as ''true'')
[INFO]
[INFO] ------------------------------------------------------------------------
[INFO] Building com.mywebapp [com.mywebapp] 0.0.1-SNAPSHOT
[INFO] ------------------------------------------------------------------------
Downloading: http://repo.maven.apache.org/maven2/org/apache/maven/plugins/maven-release-plugin/2.1/maven-release-plugin-2.1.pom
[WARNING] Failed to retrieve plugin descriptor for org.apache.maven.plugins:maven-release-plugin:2.1: Plugin org.apache.maven.plugins:maven-release-plugin:2.1 or one of its dependencies could not be resolved: Failed to read artifact descriptor for org.apache.maven.plugins:maven-release-plugin:jar:2.1
Downloading: http://download.java.net/maven/2/org/apache/maven/plugins/maven-metadata.xml
Downloading: http://download.java.net/maven/2/org/codehaus/mojo/maven-metadata.xml
397/397 B
Downloaded: http://download.java.net/maven/2/org/codehaus/mojo/maven-metadata.xml (397 B at 0.0 KB/sec)
[WARNING] Failure to transfer org.apache.maven.plugins:maven-war-plugin/maven-metadata.xml from http://download.java.net/maven/2 was cached in the local repository, resolution will not be reattempted until the update interval of maven2-repository.dev.java.net has elapsed or updates are forced. Original error: Could not transfer metadata org.apache.maven.plugins:maven-war-plugin/maven-metadata.xml from/to maven2-repository.dev.java.net (http://download.java.net/maven/2): download.java.net
[INFO]
[INFO] --- maven-war-plugin:2.3:war (default-cli) @ mywebapp-build ---
[INFO] Packaging webapp
[INFO] Assembling webapp [mywebapp-build] in [D:/workspace/target/mywebapp-build-0.0.1-SNAPSHOT]
[INFO] Processing war project
[INFO] Webapp assembled in [15 msecs]
[INFO] Building war: D:/workspace/target/mywebapp-build-0.0.1-SNAPSHOT.war
[INFO] ------------------------------------------------------------------------
[INFO] Reactor Summary:
[INFO]
[INFO] mywebapp ..................................... SUCCESS [27.999s]
[INFO] com.mywebapp [com.mywebapp] ..................... FAILURE [1:00.406s]
[INFO] ------------------------------------------------------------------------
[INFO] BUILD FAILURE
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 1:41.409s
[INFO] Finished at: Tue May 07 22:13:38 SGT 2013
[INFO] Final Memory: 11M/28M
[INFO] ------------------------------------------------------------------------
[ERROR] Failed to execute goal org.apache.maven.plugins:maven-war-plugin:2.3:war
(default-cli) on project mywebapp-build: Error assembling WAR: webxml attribute is required (or pre-existing WEB-INF/web.xml if executing in update mode)
Busque en su settings.xml
(o, posiblemente, el POM primario o corporativo de su proyecto) para el elemento <repositories>
. Se verá algo así como a continuación.
<repositories>
<repository>
<id>central</id>
<url>http://gotoNexus</url>
<snapshots>
<enabled>true</enabled>
<updatePolicy>always</updatePolicy>
</snapshots>
<releases>
<enabled>true</enabled>
<updatePolicy>daily</updatePolicy>
</releases>
</repository>
</repositories>
Tenga en cuenta el elemento <updatePolicy>
. El ejemplo le dice a Maven que se ponga en contacto con el repositorio remoto (Nexus en mi caso, Maven Central si no está utilizando su propio repositorio remoto) cada vez que Maven necesite recuperar un artefacto de instantánea durante una compilación, verificando si hay una copia más reciente. Los metadatos son necesarios para esto. Si hay una copia más reciente, Maven la descarga en su repositorio local.
En el ejemplo, para las versiones, la política es daily
por lo que se controlará durante la primera compilación del día. never
es una opción válida, como se describe en los documentos de configuración de Maven .
Los complementos se resuelven por separado. También puede tener repositorios configurados para ellos, con diferentes políticas de actualización, si lo desea.
<pluginRepositories>
<pluginRepository>
<id>central</id>
<url>http://gotoNexus</url>
<snapshots>
<enabled>true</enabled>
<updatePolicy>daily</updatePolicy>
</snapshots>
<releases>
<enabled>true</enabled>
<updatePolicy>never</updatePolicy>
</releases>
</pluginRepository>
</pluginRepositories>
Alguien más mencionó la opción -o
. Si usa eso, Maven se ejecuta en modo "fuera de línea". Sabe que solo tiene un repositorio local y no se pondrá en contacto con el repositorio remoto para actualizar los artefactos, independientemente de las políticas de actualización que utilice.
Es posible que use la -o,--offline "Work offline"
para evitar eso.
Me gusta esto:
maven compile -o
Supongo que porque no especificó la versión del complemento, por lo que desencadena la descarga de los metadatos asociados para obtener el último.
De lo contrario, ¿intentó forzar el uso del repositorio local utilizando -o?
Todavía no he estudiado, cuando Maven realiza la búsqueda, pero para obtener compilaciones estables y reproducibles, recomiendo no acceder directamente a Maven Respositories, sino utilizar Maven Repository Manager como Nexus.
Aquí está el tutorial de cómo configurar su archivo de configuración:
http://books.sonatype.com/nexus-book/reference/maven-sect-single-group.html