Tôi đang cố gắng tạo ra một cách thức mà các bản dựng kín có thể đạt được trong khi vẫn dựa vào các phụ thuộc SNAPSHOT trong dự án của bạn.Tạo Ẩn Maven Xây dựng
Theo mục đích của ví dụ, nói rằng tôi có một dự án trong đó có một cấu trúc phụ thuộc như thế này:
┌ other-1.2-SNAPSHOT
mine-1.2.3 ──┤
└ thing-3.1-SNAPSHOT ── gizmo-6.1.3-SNAPSHOT
Những gì tôi muốn làm là giải quyết tất cả các phụ thuộc SNAPSHOT tại địa phương để một cái gì đó có liên quan đến tôi phiên bản hiện tại và sau đó triển khai phiên bản đó dưới dạng bản phát hành cho kho lưu trữ bản phát hành của Nexus của tôi. Không phải tất cả những phụ thuộc này đều là nội bộ nên tôi không thể chỉ đơn giản là tạo ra một bản phát hành trên mỗi phần.
Vì vậy, trong ví dụ này, other-1.2-SNAPSHOT
sẽ trở thành một cái gì đó như other-1.2-mine-1.2.3
và thing-3.1-SNAPSHOT
sẽ trở thành thing-3.1-mine-1.2.3
. Điều này là tương đối tầm thường trong khoảng 60 dòng trăn.
Sự cố, tuy nhiên, là trong việc giải quyết SNAPSHOTs chuyển tiếp sang phiên bản cụ thể. Vì vậy, tôi cũng cần phải chuyển đổi gizmo-6.1.3-SNAPSHOT
thành gizmo-6.1.3-mine.1.2.3
và có thing-3.1-mine-1.2.3
phụ thuộc vào nó.
Đây chỉ là một ví dụ về một cách để đạt được những gì tôi muốn. Mục tiêu là trong một hoặc hai năm sau, tôi có thể kiểm tra nhánh phát hành của mình cho phiên bản 1.2.3 và có thể chạy mvn clean package
hoặc tương tự mà không phải lo lắng về việc giải quyết các phụ thuộc SNAPSHOT từ lâu.
Điều quan trọng là nhánh này phải có khả năng tương thích và không chỉ giữ lại tất cả các phụ thuộc bằng cách sử dụng chức năng jar-and-dependencies
của plugin lắp ráp. Tôi muốn có khả năng có thể sửa đổi các tệp nguồn và tạo một bản phát hành bản phát hành khác (ví dụ: áp dụng hotfix).
Vì vậy,
- Có điều gì như sẵn này sẽ có khả năng chuyển đổi phụ thuộc SNAPSHOT theo kiểu đệ quy là bê tông?
- Có plugin nào quản lý loại điều này cho bạn không? Plugin phát hành đã hứa hẹn với một số tùy chọn cấu hình trên mục tiêu
branch
của nó nhưng nó không giải quyết các dep bên ngoài theo mức độ mà tôi muốn. - Các kỹ thuật khác có sẵn để tạo bản dựng Maven kín không?
Âm thanh như một cuộc tấn công chống Maven với tôi. Trong Maven, một trong những quy tắc cơ bản cơ bản là ** Convention Over Configuration **. Nếu các phụ thuộc được tạo ra bởi chính bạn, bạn nên tự quản lý/sử dụng phiên bản SNAPSHOT/RELEASE chính xác. Nếu họ đến từ nơi khác, bạn nên luôn sử dụng phiên bản phát hành mới nhất (không phải phiên bản SNAPSHOT). Hãy xem lại lần thứ hai trong [Maven Tham chiếu đầy đủ - phần 3.3.1] (http://www.sonatype.com/books/mvnref-book/reference/pom-relationships-sect-pom-syntax.html#pom-reationships -sect-versions) và xem tại sao SNAPSHOT được sử dụng trong Maven. – yorkw
Tôi rất thấu hiểu các nguyên tắc cơ bản của Maven. Tuy nhiên, tôi sống trong thế giới thực với thời hạn và thư viện của bên thứ ba vô cùng hữu ích nhưng vẫn ngồi trên các phiên bản SNAPSHOT trong thời gian dài. Jason Van Zyl, ai đó bạn có thể biết, thậm chí thừa nhận khái niệm có một hệ thống xử lý nặng xung quanh bản phát hành là một sai lầm rất lớn (và đang thay đổi với tesla). Ngắn của việc duy trì dĩa nội bộ của tất cả các dự án chúng tôi tiêu thụ, những gì tôi đang làm thực sự là nhảy và giới hạn tốt hơn so với hầu hết sẽ. –
cũng ngay cả trong thế giới thực một số lý do nên được đưa vào tài khoản. Bạn đang chiến đấu với hệ thống ở đây. Như bạn đã đề cập Snapshots không sống đủ lâu - ngay cả khi bạn đang sử dụng ảnh chụp nhanh thời gian đóng dấu để dựa vào cho độ phân giải tạo tác. Cách tiếp cận của tôi sẽ sử dụng sự phụ thuộc và triển khai các trình bổ sung để lấy tất cả các tạo tác và triển khai các phụ thuộc snapshot đã biết vào repo maven của chính nó bằng cách sử dụng một kịch bản hoặc một số plugin tự tạo. Có thể nói chuyện với các Gizmos khác cũng giúp: nếu họ có thể phát hành phiên bản beta của hiện vật của họ, bạn có thể dựa vào những người mà không có rất nhiều lộn xộn xung quanh. – wemu