2008-10-29 31 views
44

tôi muốn phát hành một dự án chụp nhanh 'foo-1.0-SNAPSHOT' bằng cách sử dụng plugin phát hành maven. Dự án phụ thuộc vào mô-đun bên thứ 3 'bar-1.0-SNAPSHOT' chưa được phát hành. Tôi sử dụng tùy chọn 'allowTimestampedSnapshots' trong tệp pom.xml của dự án để cho phép các ảnh chụp nhanh thời gian nhưng tôi giả định rằng mô-đun bên thứ ba (thanh) không được đặt thời gian trừ khi tôi tự xây dựng nó như maven vẫn phàn nàn về các phụ thuộc SNAPSHOT chưa được giải quyết.cách phát hành dự án phụ thuộc vào dự án SNAPSHOT của bên thứ ba trong số

Có cách nào để phát hành dự án foo không phụ thuộc vào dự án SNAPSHOT phụ thuộc và nếu không làm cách nào tôi có thể thêm dấu thời gian vào dự án của bên thứ 3?

Trả lời

7

Câu trả lời ngắn gọn là xem following answer .... câu trả lời dài là bạn có thể làm việc xung quanh nó.

Cách duy nhất tôi đã đối phó trong quá khứ là để ngã ba thư viện của bên thứ ba hiệu quả và tự cắt bản phát hành. Điều này tất nhiên là nói dễ hơn làm và chỉ là đồng bằng khó khăn nếu thư viện là lớn và phức tạp và không thể nếu thư viện bên thứ 3 là nguồn đóng. Một tuyến đường dễ dàng hơn có thể để tiếp cận bên thứ 3 và yêu cầu họ cắt giảm một bản phát hành.

Tùy chọn khác có thể là sao chép pom của họ (đảm bảo rằng nó không có ảnh chụp nhanh) thay đổi thông tin phiên bản và cài đặt thủ công pom và tạo phẩm trong kho lưu trữ của bạn.

+5

Không chính xác, hãy xem các câu trả lời khác, bạn có thể nói với maven qua '-DignoreSnapshots = true' để phát hành ngay cả với các phụ thuộc chụp nhanh. Rằng bạn nên tránh làm điều đó và chỉ làm nếu hoàn toàn không có lựa chọn nào khác, là một câu chuyện khác. –

+0

Tư vấn Sonatype là triển khai tới một kho lưu trữ cục bộ http://blog.sonatype.com/2009/01/best-practices-for-releasing-with-3rd-party-snapshot-dependencies/#.UstQinlq5t0 –

-2

Chỉ cần cài đặt bình bằng pom bạn sở hữu. Tôi thường thay đổi nhóm và id tạo tác để làm rõ rằng đây không phải là phiên bản chính thức, nhưng đó thường là công việc tốt nhất xung quanh cho vấn đề của bạn.

6

Câu trả lời trước đề xuất thay đổi nhóm và id tạo tác ... không làm điều này vì maven sẽ không nhận ra nó giống như tạo tác sau này khi phụ thuộc này được phát hành và bạn sẽ kết thúc với hai bản sao trên classpath. Phương pháp ưa thích của tôi là chỉ thay đổi phiên bản và tôi sẽ làm một cái gì đó như: [phiên bản gốc] - [tên tổ chức của tôi] - [phiên bản svn tôi kéo nó từ] vì vậy tôi nhận được một cái gì đó như 1.0-SONATYPE-3425. Bằng cách sử dụng svn rev, tôi luôn có thể kéo nguồn một lần nữa và vá nó nếu cần thiết và biết chính xác những gì tôi đang sử dụng mà không cần kéo toàn bộ nguồn vào svn của riêng tôi.

Cập nhật - I blogged về việc này một thời gian trở lại.

138

Sự cố với tên thông số allowTimestampedSnapshots, trong tài liệu nhưng nguồn của plugin sử dụng tên thông số khác trong biểu thức - ignoreSnapshots.

Vì vậy, chỉ cần sử dụng -DignoreSnapshots=true và mục tiêu chuẩn bị của plugin phát hành sẽ bỏ qua phụ thuộc chụp nhanh.

+8

Tác phẩm này và tôi tin rằng câu trả lời đúng của nó (cái mà OP đang tìm kiếm). Xấu hổ, điều này không có đủ số phiếu bầu. 1! Tất nhiên, bạn không thực sự muốn xuất bản các tạo tác có phụ thuộc ảnh chụp, bạn có thể khiến người tiêu dùng của bạn cũng cần phải tìm ảnh chụp nhanh đó. Nếu bạn chỉ sử dụng ảnh chụp nhanh trong bộ thử nghiệm của bạn (hoặc tương tự) thì "-DignoreSnapshots = true" chắc chắn là một giải pháp tốt. – joelittlejohn

+1

Tôi gần như đã bỏ cuộc cho đến khi tôi tình cờ gặp điều này! Cảm ơn! –

12

Sử dụng tùy chọn maven-release-Plugin

-DignoreSnapshots=true 

thay vì

-DallowTimestampedSnapshots=true 

giúp trong trường hợp của tôi, điều này sẽ cho phép sử dụng phụ thuộc với phiên bản ảnh chụp để chuẩn bị và thực hiện một thông cáo.

Tùy chọn này nên được xử lý rất cẩn thận, vì việc sử dụng các phiên bản chụp nhanh trong bản phát hành sau đó có thể phá vỡ bản phát hành của bạn, nếu phụ thuộc ảnh chụp được cập nhật, trong trường hợp bình thường không phải là thứ bạn muốn.

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