2009-07-22 21 views
28

Tôi đang xây dựng dự án của tôi với Apache Maven và có một kho lưu trữ tùy chỉnh cấu hình nhưng khi nó chạm vào kho lưu trữ nó chỉ bị treo trong một thời gian rất dài vớiLàm thế nào để có được maven để timeout trước đó trong khi tải về phụ thuộc?

Downloading: http://maven.mycompany.com/m2/org/springframework/spring/2.5.6/spring-2.5.6.pom

sau vài phút nó đi và tải về nó từ repo trung ương

Downloading: http://repo1.maven.org/maven2/org/springframework/spring/2.5.6/spring-2.5.6.pom 12K tải (mùa xuân-2.5.6.pom)

tôi muốn thời gian chờ để được nhanh hơn nhiều hơn thế. Điều này xảy ra với tất cả các phiên bản mới hơn của maven. Phiên bản 2.0.6 hoặc cũ hơn không có vấn đề này, nó sẽ hết thời gian nhanh hơn nhiều.

+0

có vẻ như http://www.jroller.com/mrdon/entry/making_maven_2_not_suck đã có một số lần thử, nhưng tôi không thể tìm cách sử dụng nó. – rado

Trả lời

21

Trong phiên bản Maven trước 2.1, không có phương tiện để định cấu hình ứng dụng thành thời gian chờ, nhưng bạn có thể định cấu hình để kiểm tra bản cập nhật ít thường xuyên hơn nếu bạn đặt chính sách cập nhật. Điều này giải quyết một phần vấn đề.

Ví dụ:

<repository> 
    <id>myrepo</id> 
    <url>http://maven.mycompany.com/m2</url> 
    <releases> 
    <enabled>true</enabled> 
    <updatePolicy>daily</updatePolicy> 
    </releases> 
    <snapshots> 
    <enabled>false</enabled> 
    <updatePolicy>always</updatePolicy> 
    </snapshots> 
</repository> 

giá trị hợp lệ là:

  • luôn - luôn luôn kiểm tra khi Maven là bắt đầu cho các phiên bản mới hơn của ảnh chụp nhanh
  • không bao giờ - không bao giờ kiểm tra cho các phiên bản từ xa mới hơn. Sau khi tắt cập nhật thủ công có thể được thực hiện.
  • hàng ngày (mặc định) - kiểm tra trên đường chạy trốn đầu tiên trong ngày (giờ địa phương)
  • khoảng: XXX - kiểm tra từng XXX phút

xem xét khác là phần mềm bạn đang sử dụng để lưu trữ kho nội bộ của bạn . Với một người quản lý kho lưu trữ như Nexus, bạn có thể quản lý tất cả các kết nối kho lưu trữ từ xa bên ngoài của mình thông qua trình quản lý và định cấu hình thời gian chờ cho các kết nối từ xa đó. Sau đó, khách hàng của bạn sẽ chỉ truy vấn trình quản lý kho lưu trữ, ứng dụng sẽ phản hồi nhanh chóng khi thời gian chờ cho phép.


Cập nhật:

Nếu bạn biết sự phụ thuộc sẽ không được phục vụ bởi một kho lưu trữ đặc biệt, bạn có thể tách nó thành một hồ sơ, vì vậy nó không được tham chiếu trong xây dựng đó.

<profiles> 
    <profile> 
    <id>remote</id> 
    <repositories> 
     <repository> 
     <id>central</id> 
     <url>http://repo1.maven.org</url> 
     <releases><enabled>true</enabled></releases> 
     <snapshots><enabled>false</enabled></snapshots> 
     </repository> 
     ... 
    </repositories> 
    </profile> 
    <profile> 
    <id>internal</id> 
    <repositories> 
     <repository> 
     <id>myrepo</id> 
     <url>http://maven.mycompany.com/m2</url> 
     <releases><enabled>true</enabled></releases> 
     <snapshots><enabled>false</enabled></snapshots> 
     </repository> 
     ... 
    </repositories> 
    </profile> 
</profiles> 

Với cấu hình trên, chạy gói mvn -Premote sẽ không kết nối với kho lưu trữ nội bộ, vì vậy thời gian chờ sẽ không là một yếu tố.

Bạn có thể tránh được việc phải xác định các cấu hình trên từng xây dựng bằng cách thêm một số cấu hình các thiết lập của bạn:

<settings> 
    ... 
    <activeProfiles> 
    <activeProfile>internal</activeProfile> 
    <activeProfile>remote</activeProfile> 
    </activeProfiles> 
    ... 
</settings> 

Đối với Maven 2.1 bạn có thể đặt thời gian chờ bằng cách thêm một cấu hình trên máy chủ trong phần cài đặt Maven (~/.m2/settings.xml theo mặc định), ví dụ:

<server> 
    <id>myrepo</id> 
    <configuration> 
    <timeout>5000</timeout> <!-- 5 seconds --> 
    </configuration> 
</server> 
+0

Tôi đã không nhận thức được các chính sách cập nhật này, nhưng tôi chỉ nâng cấp một số phụ thuộc và vì vậy nó cần phải đi ra ngoài và tải xuống chúng. Đồng ý về người quản lý kho lưu trữ, nhưng khi tôi đang tư vấn cho công ty này tôi chỉ có thể thực hiện công việc mà họ yêu cầu của tôi. Có lẽ tôi có thể sử dụng một người quản lý kho lưu trữ trong tương lai, mặc dù đó sẽ là một điều nữa họ phải duy trì. – rado

+0

Đủ công bằng, tôi đã cập nhật câu trả lời của tôi với một cách giải quyết có thể hữu ích trong tình huống hiện tại của bạn. –

+0

Để làm việc xung quanh nó cho thời điểm những gì tôi đã làm là để xóa từ pom.xml, chạy mvn và để cho nó tải xuống từ repo1, sau đó đặt kho lưu trữ tùy chỉnh của tôi trở lại. – rado

0

Một hack nhanh chóng và dơ bẩn là thêm một mục host tùy chỉnh tập tin để chuyển hướng yêu cầu mạng để kho lưu trữ không hợp lệ đến kho lưu trữ hợp lệ.

+0

Âm thanh như một ý tưởng hay, trông như thế nào? Tôi giả sử bạn có nghĩa là '/ etc/hosts' trên Linux. –

Các vấn đề liên quan