2013-05-07 1367 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

相關問題