2011-10-21 60 views
6

khi tôi đang phát triển, tôi thường cần phải thay đổi sự phụ thuộc, nhưng tôi chưa sẵn sàng triển khai các thay đổi của mình. Ví dụ, tôi đang làm việc trên dự án Foo và tôi nhận ra rằng tôi cần thêm một phương thức vào thư viện chung. Trước khi triển khai thay đổi này vào kho lưu trữ nội bộ của chúng tôi, tôi muốn cài đặt các thay đổi cho thư viện chung (mvn install) và biên dịch lại Foo để sử dụng thư viện chung trong kho lưu trữ cục bộ (lưu ý rằng tôi đang sử dụng tất cả các phiên bản SNAPSHOT).Tại sao maven sử dụng kho lưu trữ nội bộ của tôi trước kho lưu trữ cục bộ của tôi?

Tuy nhiên, sau khi tôi mvn install thư viện chung của mình, khi tôi biên dịch lại Foo, nó không sử dụng thư viện chung mới - nó tiếp tục sử dụng SNAPSHOT mới nhất của thư viện chung trong kho lưu trữ nội bộ. Nếu tôi triển khai thư viện chung đã thay đổi, Foo sẽ chọn nó ngay lập tức.

Làm cách nào để tôi có được hình động đầu tiên trong kho lưu trữ cục bộ?

CẬP NHẬT: khi tệp được cài đặt vào kho lưu trữ cục bộ, tệp sẽ có tên như foo-1.0.0-SNAPSHOT.jar, nhưng khi tôi triển khai, nó sẽ nhận được dấu thời gian foo-1.0.0-20111104.191316-23.jar. Tôi nghĩ rằng đây là lý do tại sao các tạo tác từ xa được kéo mỗi lần. Bất kỳ ý tưởng nào tại sao mvn install không hoạt động như mvn deploy? Liệu nó có liên quan đến việc tôi có một kho lưu trữ snapshot được thiết lập để triển khai không?

+0

Bạn có 'localRepository' trong [settings.xml] (http://maven.apache.org/settings.html) trỏ đến vị trí không tồn tại không? – millhouse

+0

So sánh ngày hệ thống của bạn với ngày hệ thống repo nội bộ của bạn (ví dụ: Nexus). Nếu đó là một chặng đường dài phía trước, dấu thời gian của nó sẽ "giành chiến thắng" – millhouse

Trả lời

3

Theo mặc định, Maven kiểm tra các phiên bản mới của các tạo phẩm SNAPSHOT một lần mỗi ngày. Khi thực hiện kiểm tra này, nó sẽ tải xuống SNAPSHOTS từ các repos từ xa mới hơn những gì bạn có tại địa phương. Dấu thời gian tạo tác của bạn không đồng bộ và bạn đang thực hiện điều gì đó để ghi đè chính sách cập nhật của Maven (như calling it with -U hoặc setting the udpatePolicy thành "luôn luôn"), nếu không kho lưu trữ cục bộ bạn đang cài đặt tạo tác sẽ không giống với bạn sau đó chạy Maven chống lại. Những gì bạn mô tả không phải là hành vi Maven điển hình. Để có câu trả lời tốt hơn, hãy cung cấp thêm chi tiết trong câu hỏi của bạn.

Một chỉ báo bạn có thể tìm kiếm: sau khi bạn cài đặt tạo phẩm phổ biến, khi bạn biên dịch tiếp theo Foo, Maven có tải lại phần tạo tác phổ biến một lần nữa không? Nếu vậy, sau đó nó thực sự là nhận được nó từ xa, và bạn cần phải kiểm tra cài đặt cập nhật của bạn. Nếu không, sau đó bạn có một cái gì đó kỳ lạ xảy ra tại địa phương.

+0

Cảm ơn Ryan, rõ ràng không ai có thể cho tôi biết chính xác những gì đang diễn ra mà không có thêm chi tiết. Thật hữu ích khi biết rằng đây không phải là hành vi tiêu chuẩn ở nơi đầu tiên để tôi có thể điều tra thêm! – schmmd

+0

Tôi đã thêm một số chi tiết khác - xem CẬP NHẬT của tôi ở cuối câu hỏi của tôi. – schmmd

+0

Trong một thời gian, Maven đã sử dụng dấu thời gian để xác định duy nhất các phiên bản chụp nhanh được triển khai cho một repo từ xa và "SNAPSHOT" chỉ đơn giản là một bí danh cho các hiện vật gần đây nhất. Tôi nghĩ rằng đó là một nơi nào đó khoảng 2.1.0 mà bắt đầu? Nó không thay đổi bất cứ điều gì về vấn đề của bạn. –

0

Bạn có thể thử tùy chọn này. Điều này làm việc cho tôi.

Trong bản pom.xml thay đổi chính của bản dự án, hãy thay đổi cài đặt đã bật 'snapshots' thành 'false'.

<repository> 
    <id>yourRepo</id> 
    <name>Repository</name> 
    <url>http://your.repo.com/repo</url> 
    <snapshots> 
     <enabled>false</enabled> 
    </snapshots> 
</repository> 
Các vấn đề liên quan