2013-05-07 1369 views
64

以下是我在尝试使用maven构建Web应用程序时,我的互联网连接处于flanky状态时通常会收到的错误。为什么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 2013-05-07 14:30:50

+5

我不知道为什么,但可以通过使用-o选项来避免这种情况,比如'mvn clean install -o ' – ant 2013-05-07 14:33:57

+0

实际上,构建失败的错误是“组装WAR时出错:需要webxml属性现有的WEB-INF/web.xml如果在更新模式下执行)“。所以你应该解决这个问题。我无法想象它与您的互联网连接有关。依赖关系解析警告就是:警告。他们不是你的构建失败的最终原因。 – Frans 2013-12-16 12:19:51

回答

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中所述。

插件分开解决。您也可以为这些配置存储库,并根据需要使用不同的更新策略。其他人提到了-o选项。如果使用它,Maven将以“脱机”模式运行。它知道它只有一个本地回购,并且无论您使用哪种更新策略,它都不会联系远程回购来刷新工件。

+0

非常好,谢谢! – sunny 2015-08-19 07:56:58

+1

问题是:为什么它不总是“从不”(我认为它应该是这样)?为什么你需要每天更新或总是更新? – Leon 2017-11-22 09:07:39

+0

@Leon在中期开发周期中,您的项目可能会有'-SNAPSHOT'依赖项,您可能希望始终选择最新的内置版本 - 至少在CI系统上,您可能会这样做,开发人员可能有不同的偏好 - 交易构建稳定性与获取最新变化。 如果没有设置,maven文档(特性,不幸)不能说清楚的是这些默认值。 – 2017-12-18 09:31:41

0

我还没有研究,当Maven做哪些查找,但要获得稳定的和可重复的版本,我强烈建议不要直接访问Maven Respositories,而是使用Maven Repository Manager(如Nexus)。

这里是教程如何建立你的设置文件:

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

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

+5

但是***“为什么maven每次都要下载元数据?”*** – acdcjunior 2013-05-07 14:32:11

+0

@acdcjunior as I说,我还没有研究过。但是使用本地Maven Repository Manager也可以解决大部分问题(如果Maven检查元数据,它将只访问Maven Repository Manager) – Puce 2013-05-07 14:34:38

+1

恕我直言,回购管理器仅在组织内部有用,以避免冗余下载,尤其是部署工件特定于该组织(如父母和内部模块)。否则,为什么添加一个额外的镜像,因为你已经拥有本地镜像了? – Gab 2013-05-07 14:43:23

12

我想,因为你因此触发相关元数据的下载,以便没有指定插件版本得到最后一个。

否则,您是否尝试使用-o强制本地回购使用?

+0

那么如何指定插件版本?我确定我在POM中设置了版本...你能更具体吗? – xybrek 2013-05-07 14:48:07

+0

好吧,如果你在'plugin'元素中有一个'version'元素,那么你确实已经配置了它,如果是的话,我就出来了...祝你好运 – Gab 2013-05-07 14:58:49

+0

在我的情况下,版本是范围[12.1 12.2)并且元数据缓存设置为24小时,因此每天首次构建时会检查更新的版本。 – mzzzzb 2014-09-12 13:50:14

11

可能使用标志-o,--offline "Work offline"来防止这种情况。

像这样:

maven compile -o

相关问题