2012-04-05 25 views
5

Tôi có một vật mà nên được xây dựng trong vài nền tảng mục tiêu:Đồng bộ hóa các phiên bản tạo tác trên nền tảng với quá trình maven phát hành

  • Linux x86
  • Windows x86
  • ARM11

Thật không may do để thiếu các crosscompilers, không thể tạo tất cả các phiên bản của artifact trong một lần.

Sử dụng Nói cách khác, mục tiêu là để có một cái gì đó trong kho như thế này

  • artifact-1.0.0-linux.zip
  • artifact-1.0.0-windows.zip
  • vật -1.0.0-arm11.zip
  • artifact-1.0.1-linux.zip
  • artifact-1.0.1-windows.zip
  • artifact-1.0.1-arm11.zip
  • ...

Lưu ý rằng các phiên bản được đồng bộ hóa. Làm thế nào để thực hiện điều này?

Vấn đề là quá trình phát hành nâng cấp phiên bản của tệp pom.xml sau mỗi lần xây dựng. Vì vậy, bằng cách xây dựng liên tục trên các nền tảng khác nhau tôi có thể đạt được có

  • artifact-1.0.0-linux.zip
  • artifact-1.0.1-windows.zip
  • artifact-1.0.2-arm11.zip
  • artifact-1.0.3-linux.zip
  • artifact-1.0.4-windows.zip
  • artifact-1.0.5-arm11.zip
  • ...

nhưng đây không phải là những gì tôi đang tìm kiếm.

tôi có thể

  1. chạy trên Linux

    phát hành mvn: chuẩn bị phát hành: thực hiện -DpushChanges = false

    (với pushChanges thiết lập để phát hành sai sẽ không tăng số phiên bản trong SCM)

  2. và sau đó chạy trên Windows

    mvn phát hành: chuẩn bị phát hành: thực hiện

    (điều này sẽ làm tăng số phiên bản)

Nhưng sau đó trách nhiệm để kích hoạt các quá trình phát hành trên nền tảng khác nhau theo thứ tự thích hợp nằm với tôi. Có cách nào con quạ có thể giúp tôi với điều này không?

Bạn có bất cứ đề xuất nào không?

Cảm ơn


PS. Lưu ý rằng đây không phải là câu hỏi về cách sắp xếp thành các mô-đun. Đó là về cách đồng bộ hóa các quá trình phát hành của một tạo tác duy nhất trên nhiều nền tảng.

Trả lời

0

Như tôi thấy, bạn sử dụng bộ phân loại (hậu tố tên tệp của tác phẩm) như linux, windows hoặc arm11 để phân biệt các bản phát hành của các tạo phẩm khác nhau, dành cho nền tảng cụ thể. Vì vậy, nếu bạn tạo dự án đa mô-đun được Maven quản lý, trong đó các mô-đun sẽ là các tạo phẩm có cùng số groupId, giống artifactId, giống như version (có thể được thừa kế từ cha mẹ chung), nhưng khác nhau classifier, bạn sẽ nhận được chính xác những gì bạn muốn. Trong trường hợp này, bạn luôn luôn phát hành POM đa mô-đun của bạn (thường là nó là cha mẹ chung cho các mô-đun của nó) để có tất cả các mô-đun được phát hành cùng một lúc. Giả sử cùng phiên bản cho tất cả mô-đun chính sách (mà có vẻ phù hợp khá tốt ở đây), về cơ bản bạn có thể thực hiện:

mvn release:prepare release:perform -DautoVersionSubmodules

và đó là nó. Bạn sẽ nhận được artifact-1.0.0-linux.zip, artifact-1.0.0-windows.zip, artifact-1.0.0-arm11.zip hiện vật được phát hành. Phiên bản phát triển tiếp theo sẽ được đặt thành 1.0.1-SNAPSHOT cho tất cả các mô-đun (thông qua kế thừa từ cha mẹ).

+0

Nhưng quan điểm của tôi là khi bạn đang ở trên Linux, bạn không thể tạo một nhị phân cho cửa sổ (do một số ràng buộc toolchain). Vì vậy, quá trình xây dựng khi chạy trên Linux, không thể tạo các tệp nhị phân Windows. Và ngược lại. Vì vậy, bạn không thể tạo tất cả các tệp nhị phân cho tất cả các nền tảng trong một lần. --- Đây không phải là câu hỏi về cách sắp xếp thành các mô-đun. Đó là về cách đồng bộ hóa các quá trình phát hành của một tạo tác duy nhất trên nhiều nền tảng. –

+0

OK, vì vậy tôi sợ rằng Maven không thể giúp bạn làm điều này tự động như bạn muốn, trừ khi bạn muốn (và có một thời gian) để tạo plugin phát hành riêng. Như bạn đã đề cập, bạn có thể làm tất cả những gì mà không cần nhấn mạnh một phiên bản và sau đó bum nó trên toàn cầu vào cuối, nhưng đây là một cái gì đó bạn phải nhớ về. Bạn cũng có thể loại bỏ phiên bản phổ biến (thừa kế từ cha mẹ) và gõ phiên bản theo nghĩa đen tại tất cả các POM của mô-đun. Tuy nhiên, thời gian này, bạn phải kiểm soát quá trình này và đảm bảo rằng tất cả các mô-đun được phát hành với phiên bản và mỗi mô-đun được phát hành một lần. Tôi thực sự không thể thấy 100% cách tự động. –

+0

Tôi luôn luôn thiếu thời gian :) Dù sao, cảm ơn sự giúp đỡ. –

2

Bạn đã tìm thấy giải pháp cho điều này chưa? Thật tốt khi biết tôi không phải là người duy nhất chiến đấu với Maven :-)

Dù sao,

Bạn có cho phép triển khai một phiên bản phát hành cho mối quan hệ? Tôi nghĩ, bạn có thể thực hiện việc này:

1 - Thực hiện "phát hành mvn: chuẩn bị phát hành: thực hiện" từ máy tính cửa sổ - sẽ nhận được artifact-1.0.1-windows.zip vào nexus.

2 - Thanh toán đồ tạo tác-1.0.1 thẻ từ kiểm soát nguồn

3 - Thực hiện "triển khai mvn" từ linux và arm11 (bất kể đó là: P) - cũng sẽ nhận được -linux.zip và -arm11.zip vào nexus.

Mặc dù, tôi tin rằng tùy thuộc vào mối quan hệ được cấu hình như thế nào, nó sẽ không cho phép bạn triển khai lại bất cứ điều gì với GAV cùng (thậm chí nếu phân loại là khác nhau)

0

Bạn đã giúp tôi ra với câu hỏi của bạn ... Tôi không biết về tùy chọn pushChanges = false.

Sử dụng Jenkins bạn có thể thiết lập công việc trên mỗi nền tảng thực hiện phát hành maven theo chuỗi bằng tính năng "Trình kích hoạt tạo từ xa (ví dụ: từ tập lệnh)". Nếu bạn muốn, bạn có thể sử dụng một Phiên bản tham số để chọn phiên bản cần xây dựng (Nếu bạn sử dụng, thì bạn cần Parameterized Trigger Plugin để kích hoạt bản dựng trên các nền tảng khác).

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