2013-05-07 7 views
64

Ниже приведена ошибка, которую я обычно получаю, когда мое подключение к Интернету великолепен при попытке создать веб-приложение с помощью maven.Почему Maven загружает maven-metadata.xml каждый раз?

Вопрос в том, почему maven всегда загружается каждый раз, когда одно и то же приложение было создано ранее.

Что может быть неправильным в моей конфигурации, что делает maven для загрузки каждый раз?

Ниже ошибка я получаю, когда я пытаюсь построить автономный:

[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) 
+2

Доступ к метаданным в случае СНАПШОТ необходимо получить Maven информацию о вновь созданной снимка, и т.д. – khmarbaise

+5

Я не знаю, почему, но вы можете избежать этого, используя опцию -o, например 'mvn clean install -o ' – ant

+0

На самом деле ошибка, с которой происходит сборка, это «Ошибка сборки WAR: необходим атрибут webxml (или pre- существующий WEB-INF/web.xml при выполнении в режиме обновления) ». Поэтому вы должны это исправить. Я не могу представить, как это связано с вашим подключением к Интернету. Предупреждения о разрешении зависимостей таковы: предупреждения. Они не являются основной причиной неудачи сборки. – Frans

ответ

81

Посмотрите на свой settings.xml (или, возможно, родительский или корпоративный родительский объект POM проекта) для элемента <repositories>. Он будет выглядеть примерно так.

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

Примечание: <updatePolicy> элемент. В этом примере Maven обращается к удаленному репо (Nexus в моем случае, Maven Central, если вы не используете свое собственное дистанционное репо) в любое время, когда Maven должен получить артефакт моментального снимка во время сборки, проверяя, есть ли более новая копия. Для этого требуются метаданные. Если есть более новая копия, Maven загружает ее в местное репо.

В этом примере для релизов политика daily, поэтому она будет проверяться во время первой сборки дня. never также является допустимым вариантом, как описано в Maven settings docs.

Плагины разрешаются отдельно. У вас могут быть и репозитории, настроенные для них, при необходимости с различными политиками обновления.

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

Кто-то еще упомянул опцию -o. Если вы используете это, Maven работает в автономном режиме. Он знает, что он имеет только локальное репо, и он не будет связываться с удаленным репо для обновления артефактов независимо от того, какие политики обновления вы используете.

+0

очень хорошо, спасибо! – sunny

+1

Вопрос в том, почему это не всегда «никогда» (что, я думаю, должно быть)? Зачем вам нужно обновлять ежедневно или всегда? – Leon

+0

@Leon В течение цикла разработки вашего проекта могут существовать зависимости «-SNAPSHOT», для которых вы, возможно, захотите всегда выбрать последнюю версию, по крайней мере, в системе CI, которую вы, вероятно, захотите, у разработчика может быть разная сборка предпочтений стабильность и получение последних изменений. То, что maven docs (характерно, к сожалению) не дает понять, это значения по умолчанию для них, если ничего не установлено. –

0

Я до сих пор не изучены, когда Maven делает выглядящие вверх, но, чтобы получить стабильный и воспроизводимый строит, я настоятельно рекомендую не обращаться к репозиториям Maven напрямую, а использовать диспетчер хранилища Maven, такой как Nexus.

Вот учебник, как настроить свой файл настроек:

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

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

+5

Но ***« Почему maven загружает метаданные каждый раз? »*** – acdcjunior

+0

@acdcjunior as I сказал, я еще не изучил это. Но использование локального менеджера хранилища Maven также решит большинство из этих проблем (если Maven проверит наличие метаданных, он получит доступ только к вашему менеджеру репозитория Maven) – Puce

+1

IMHO менеджер репо полезен только внутри организации, чтобы избежать избыточной загрузки и, в частности, для развертывания артефактов специфичные для этой организации (например, родительские посты и внутренние модули). Иначе зачем добавлять дополнительное зеркало, поскольку у вас уже есть локальный? – Gab

12

Я полагаю, потому что вы не указали версии плагина, так что запускает загрузку связанных с ними метаданных в порядке чтобы получить последний.

В противном случае вы пытались принудительно использовать локальное использование репо с помощью -o?

+0

Итак, как вы указываете версию плагина? Я уверен, что у меня есть версия, установленная в POM ... можете ли вы быть более конкретным? – xybrek

+0

ну, если у вас есть элемент 'version' внутри элемента' plugin', то вы его действительно настроили, если это так, из идей ... Удачи – Gab

+0

в моем случае версия была диапазона [12.1 12.2) и кеш метаданных был установлен в 24 часа, поэтому он будет проверять более новую версию при первой сборке каждый день – mzzzzb

11

Возможно, для предотвращения этого используется флаг -o,--offline "Work offline".

Как это:

maven compile -o

Смежные вопросы