2013-05-07 14 views
64

Dưới đây là lỗi mà tôi thường gặp khi kết nối Internet của tôi khó xử khi cố gắng xây dựng một ứng dụng web với maven.Tại sao Maven tải xuống maven-metadata.xml mỗi lần?

Câu hỏi của tôi là, tại sao maven luôn phải tải xuống mỗi khi ứng dụng tương tự đã được tạo trước đó.

Điều gì có thể sai trong cấu hình của tôi làm cho maven tải xuống mỗi lần?

Dưới đây là một lỗi tôi nhận được khi tôi cố gắng xây dựng ẩ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) 
+2

Việc truy cập vào siêu dữ liệu trong trường hợp cần thiết để có được của SNAPSHOT Maven thông báo về mới được tạo ra SNAPSHOT của, vv – khmarbaise

+5

Tôi không biết tại sao nhưng bạn có thể tránh điều này bằng cách sử dụng tùy chọn -o như 'mvn clean install -o ' – ant

+0

Trên thực tế, lỗi xây dựng không thành công là "Lỗi lắp ráp WAR: thuộc tính webxml là bắt buộc (hoặc trước WEB-INF/web.xml hiện có nếu thực hiện trong chế độ cập nhật) ". Vì vậy, bạn nên khắc phục điều đó. Tôi không thể hình ảnh nó có liên quan đến kết nối internet của bạn. Cảnh báo độ phân giải phụ thuộc chỉ là: cảnh báo. Chúng không phải là nguyên nhân cuối cùng gây ra lỗi xây dựng của bạn. – Frans

Trả lời

81

Hãy tìm trong số settings.xml (hoặc, có thể là cha mẹ của công ty hoặc công ty mẹ của bạn) cho phần tử <repositories>. Nó sẽ trông giống như dưới đây.

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

Lưu ý yếu tố <updatePolicy>. Ví dụ này yêu cầu Maven liên lạc với repo từ xa (Nexus trong trường hợp của tôi, Maven Central nếu bạn không sử dụng repo từ xa của riêng bạn). Siêu dữ liệu là bắt buộc cho việc này. Nếu có bản sao mới hơn, Maven sẽ tải nó xuống repo cục bộ của bạn.

Trong ví dụ, đối với bản phát hành, chính sách là daily để nó sẽ kiểm tra trong lần xây dựng đầu tiên của bạn trong ngày. never cũng là một tùy chọn hợp lệ, như được mô tả trong Maven settings docs.

Plugin được giải quyết riêng. Bạn có thể có kho lưu trữ được cấu hình cho những người là tốt, với các chính sách cập nhật khác nhau nếu muốn.

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

Một người khác đã đề cập đến tùy chọn -o. Nếu bạn sử dụng, Maven sẽ chạy ở chế độ "offline". Nó biết nó chỉ có repo cục bộ, và nó sẽ không liên lạc với repo từ xa để làm mới các tạo phẩm bất kể bạn sử dụng chính sách cập nhật nào.

+0

rất tốt, cảm ơn bạn! – sunny

+1

Câu hỏi đặt ra là: tại sao nó không phải luôn luôn "không bao giờ" (mà tôi nghĩ nó nên là)? Tại sao bạn cần cập nhật hàng ngày hoặc luôn? – Leon

+0

@Leon Trong chu kỳ phát triển giữa dự án của bạn có thể có các phụ thuộc '-SNAPSHOT' mà bạn có thể muốn luôn luôn chọn phiên bản mới nhất - ít nhất, trên hệ thống CI, bạn có thể ổn định so với các thay đổi mới nhất. Các tài liệu về maven (đặc trưng, ​​không may) không rõ ràng là các giá trị mặc định cho các giá trị này nếu không có gì được đặt. –

0

tôi đã không nghiên cứu nào, khi Maven không mà nhìn lên, nhưng để có được ổn định và tái sản xuất xây dựng, tôi khuyên không truy cập trực tiếp vào Maven Respositories nhưng để sử dụng Trình quản lý Kho lưu trữ Maven như Nexus.

Dưới đây là hướng dẫn làm thế nào để thiết lập tập tin cài đặt của bạn:

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

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

+5

Nhưng ***" Tại sao maven tải xuống siêu dữ liệu mỗi lần? "*** – acdcjunior

+0

@acdcjunior as I đã nói, tôi chưa nghiên cứu điều đó. Nhưng việc sử dụng Maven Repository Manager cục bộ sẽ giải quyết hầu hết các vấn đề này (nếu Maven kiểm tra siêu dữ liệu, nó sẽ chỉ truy cập Trình quản lý Kho lưu trữ Maven của bạn) – Puce

+1

Trình quản lý repo của IMHO hữu ích trong một tổ chức để tránh tải xuống thừa và đặc biệt để triển khai các tạo tác cụ thể cho tổ chức này (như cha mẹ và mô-đun nội bộ). Nếu không, tại sao thêm một tấm gương bổ sung như bạn đã có một địa phương? – Gab

12

Tôi cho rằng vì bạn không nói rõ phiên bản plugin để nó gây nên việc tải xuống của siêu dữ liệu liên quan đến theo thứ tự để lấy cái cuối cùng.

Nếu không, bạn đã cố gắng ép buộc sử dụng repo cục bộ bằng -o?

+0

Vậy làm thế nào để bạn chỉ định phiên bản plugin? Tôi chắc rằng tôi có phiên bản được đặt trong POM ... bạn có thể cụ thể hơn không? – xybrek

+0

nếu bạn có phần tử 'phiên bản' bên trong phần tử' plugin' thì bạn đã thực sự định cấu hình nó, nếu vậy tôi không có ý tưởng ... Chúc may mắn – Gab

+0

trong trường hợp của tôi là phiên bản [12.1 12.2] và bộ nhớ cache siêu dữ liệu được đặt thành 24 giờ để nó sẽ kiểm tra phiên bản mới hơn lúc đầu xây dựng mỗi ngày – mzzzzb

11

Có thể sử dụng cờ -o,--offline "Work offline" để ngăn chặn điều đó.

Như thế này:

maven compile -o