web-dev-qa-db-fra.com

Pourquoi Maven télécharge-t-il le fichier maven-metadata.xml à chaque fois?

Vous trouverez ci-dessous l'erreur que j'ai généralement lorsque ma connexion Internet est floue lorsque je tente de créer une application Web avec Maven.

Ma question est la suivante: pourquoi Maven doit-il toujours télécharger chaque fois que la même application a été créée plus tôt?.

Qu'est-ce qui ne va pas dans ma configuration et qui oblige maven à télécharger à chaque fois?

Ci-dessous une erreur que je reçois lorsque j'essaie de créer en mode hors connexion:

[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)
91
xybrek

Regardez dans votre settings.xml (ou éventuellement le parent ou la société mère POM de votre projet) pour le <repositories> élément. Cela ressemblera à quelque chose comme ci-dessous.

<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>

Noter la <updatePolicy> élément. L'exemple indique à Maven de contacter le référentiel distant (Nexus dans mon cas, Maven Central si vous n'utilisez pas votre propre référentiel distant) chaque fois que Maven doit récupérer un artefact de capture instantanée lors d'une construction, en vérifiant s'il existe une copie plus récente. Les métadonnées sont nécessaires pour cela. S'il existe une copie plus récente, Maven la télécharge dans votre dépôt local.

Dans l'exemple, pour les versions, la stratégie est daily. Elle sera donc vérifiée lors de votre première génération de la journée. never est également une option valide, comme décrit dans la section Documents de configuration Maven .

Les plugins sont résolus séparément. Vous pouvez également avoir des référentiels configurés pour ceux-ci, avec différentes stratégies de mise à jour si vous le souhaitez.

<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>

Quelqu'un d'autre a mentionné le -o option. Si vous utilisez cela, Maven s'exécute en mode "hors ligne". Il sait qu'il ne dispose que d'un référentiel local et ne contactera pas le référentiel distant pour actualiser les artefacts, quelles que soient les stratégies de mise à jour que vous utilisez.

111
user944849

Il est possible d'utiliser le drapeau -o,--offline "Work offline" pour empêcher cela.

Comme ça:

maven compile -o

24
jfc

Je suppose que parce que vous n'avez pas spécifié la version du plugin, le téléchargement des métadonnées associées est alors déclenché pour obtenir la dernière.

Sinon, avez-vous essayé de forcer l'utilisation du référentiel local à l'aide de -o?

13
Gab

Je n'ai pas encore étudié la question de savoir quand Maven, mais pour obtenir des versions stables et reproductibles, je recommande fortement de ne pas accéder directement à Maven Respositories, mais d'utiliser un gestionnaire de référentiels Maven tel que Nexus.

Voici le tutoriel pour configurer votre fichier de paramètres:

http://books.sonatype.com/nexus-book/reference/maven-sect-single-group.html

http://maven.Apache.org/repository-management.html

0
Puce