2011-08-26 29 views
18

Chúng tôi có một dự án maven đa mô-đun lớn. Với mục tiêu tăng năng suất phát triển, gần đây chúng tôi bắt đầu triển khai ảnh chụp nhanh đến kho lưu trữ từ xa (thông qua xây dựng trung tâm) và giới thiệu các hồ sơ maven có nghĩa là người dùng chỉ cần kiểm tra và xây dựng một tập hợp các mô-đun và chụp nhanh các phần còn lại. Chúng tôi cũng đã đặt chính sách cập nhật của chúng tôi trên kho lưu trữ từ xa thành 'không bao giờ', để đảm bảo rằng nó rõ ràng khi chúng tôi muốn cập nhật ảnh chụp nhanh cục bộ. Một lệnh điển hình là như vậy; mvn -Pref -U cài đặt sạch.Cho phép các ảnh chụp nhanh được xây dựng cục bộ để ghi đè các ảnh chụp nhanh từ xa gần đây

Bây giờ, trong lò phản ứng maven, việc xây dựng mô-đun được xác định trong cấu hình hoạt động hoàn hảo, maven sử dụng ảnh chụp nhanh cho các phụ thuộc của chúng, bao gồm tải xuống bất kỳ cập nhật nào từ kho lưu trữ từ xa (lưu ý quan trọng) ảnh chụp nhanh, triển khai trung tâm của chúng tôi là tất cả các ảnh chụp nhanh mô-đun từ dự án của chúng tôi, ngay cả khi chỉ một vài trong số chúng đã thay đổi).

Trục trặc có vẻ là khi maven sau đó giải quyết các phụ thuộc trở lại các mô đun được xây dựng cục bộ từ các mô-đun tồn tại bên ngoài cấu hình - nếu ảnh chụp đã được triển khai từ xa từ khi tạo mô-đun như vậy, phiên bản cập nhật hơn và tiến hành tải xuống và ghi đè ảnh chụp nhanh được xây dựng cục bộ. Điều này có thể gây ra sự cố mà các mô-đun khác đang mong đợi mô-đun được thay đổi cục bộ. Về cơ bản, tôi muốn có một tùy chọn như 'sử dụng ảnh chụp được xây dựng cục bộ' trong bất kỳ mô-đun nào trong tiểu sử của tôi trên bất kỳ ảnh chụp từ xa nào, mặc dù dấu thời gian cho biết ảnh chụp từ xa gần đây hơn.

Người khác đã làm gì trong trường hợp này?

cảm ơn,

Paul

+0

'Điều này có thể gây ra sự cố khi các mô-đun khác mong muốn mô-đun thay đổi cục bộ. 'Nếu bạn đã thay đổi mô-đun cục bộ - chỉ cần biên dịch nó và bạn sẽ có ảnh chụp mới nhất trong kho lưu trữ cục bộ của bạn và nó sẽ được sử dụng để xây dựng. Hay tôi không hiểu gì? –

+2

Đó thực sự là những gì tôi làm. Vấn đề dường như phát sinh khi nói một mô-đun sau đó có một sự phụ thuộc vào mô-đun được xây dựng cục bộ này. Maven tại thời điểm này kiểm tra xem ảnh chụp nhanh từ xa có dấu thời gian sau này hay không và nếu tải xuống và cài đặt ảnh chụp nhanh trong kho lưu trữ cục bộ của tôi ghi đè mô-đun được xây dựng cục bộ của tôi. –

+0

Btw Tôi đánh giá cao một phần của vấn đề này là tôi đang triển khai tất cả các ảnh chụp trong bản dựng trung tâm của mình, ngay cả khi không phải tất cả chúng đều thay đổi .. Tôi không thực sự chắc chắn cách thiết lập/triển khai có thể triển khai một cách thông minh modules –

Trả lời

0

vấn đề gì hiện vật phải được cập nhật và những gì phải không được cập nhật là một vấn đề rất khó khăn không chỉ đối với maven, nhưng đối với người sử dụng quá. Maven không phải là AI. Tôi nghĩ rằng bạn có thể xây dựng dự án của mình ở chế độ ngoại tuyến để tránh các hiện vật tải xuống (nhưng, chắc chắn, các tạo tác mà bạn muốn được cập nhật sẽ không được cập nhật).

3 năm trước, chúng tôi đã cố gắng giải quyết vấn đề này theo cách như vậy: xây dựng (bản dựng trung tâm của bạn) chỉ được chứa các phiên bản (không có ảnh chụp nhanh). Ở đó - bạn có thể chắc chắn rằng nếu bạn xây dựng dự án - nó ổn định cùng một mã. Nếu bạn thay đổi một số tạo tác, bạn tạo snapshot của mô-đun và khi hoàn thành công việc, bạn tạo phiên bản và cập nhật các phụ thuộc. Nhưng, dẫn đến một vấn đề khác: nếu bạn không có hệ thống kiểm tra tự động lớn, bạn có thể dành rất nhiều thời gian để tạo phiên bản (bug -> fix -> version -> bug -> fix -> version - > v.v.)

Hôm nay tôi làm việc trong nhóm nhỏ và nếu ai đó cập nhật phần của mình, anh ấy chỉ nói điều đó và mọi người muốn cập nhật - lấy nó - và những người không - không dùng.

Tôi không phải là guru trong các câu hỏi như vậy. Vì vậy, tôi sẽ rất vui khi nghe cách đơn giản hơn để tránh vấn đề này.

1

Tôi nghĩ bạn sẽ phải ngăn các ảnh chụp nhanh không thay đổi được triển khai.Triển khai một ảnh chụp được về cơ bản nói:

"này bây giờ là ảnh chụp mới nhất và lớn nhất, chọn tôi trên cũ (trong ý thức timestamp) ảnh chụp nhanh"

Tôi đoán bạn có thể làm một số jiggery -pokery cho ảnh chụp nhanh cục bộ của bạn, chẳng hạn như liên kết một số tập lệnh đến giai đoạn install để đặt siêu dữ liệu dấu thời gian của ảnh chụp nhanh trong tương lai (vì vậy Maven luôn chọn ảnh chụp nhanh từ xa). Nhưng điều đó không tốt với tôi chút nào!

Triển khai chụp nhanh có thể được kích hoạt bằng các cam kết kiểm soát nguồn. Bạn có thể làm điều này thay thế không?

7

Nếu bạn có thể cập nhật lên Maven 3, bạn có thể sử dụng công tắc dòng lệnh --no-snapshot-updates (-nsu cũng hoạt động để lưu nhập). Có lỗi với tùy chọn đó đã được khắc phục trong 3.0.4, vì vậy hãy đảm bảo bạn đang sử dụng bản phát hành mới nhất.

Bạn cũng có thể thử chế độ ngoại tuyến, nhưng điều đó sẽ dừng TẤT CẢ các kiểm tra cập nhật cho đến khi bạn dừng "ngoại tuyến". Trước tiên, hãy xây dựng để đảm bảo bạn có tất cả các phụ thuộc được tải xuống kho lưu trữ cục bộ của bạn. Sau đó, bạn có thể nhập chế độ ngoại tuyến bằng cách thêm <offline>true</offline> vào tệp settings.xml của mình (và chuyển đổi thành false khi bạn sẵn sàng bắt đầu kiểm tra lại cập nhật) hoặc sử dụng công tắc dòng lệnh -o hoặc --offline khi thực hiện xây dựng. Này hoạt động trong Maven 2 hoặc 3.

0

Tôi biết điều này là rất cũ, nhưng đi qua cùng một vấn đề và giải quyết nó bằng cách chia việc xây dựng thành hai bước:

  1. mvn -U phụ thuộc: cây
  2. mvn test

Bước đầu tiên thực hiện cập nhật ảnh chụp nhanh mà không cần xây dựng gì và chạy rất nhanh.

Sau đó, bước thứ hai là xây dựng/thử nghiệm thông thường, nhưng KHÔNG CÓ ảnh chụp nhanh.

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