2013-07-25 25 views
6

bất kỳ trợ giúp hoặc con trỏ nào thực sự sẽ được đánh giá cao. Tôi cần phải tiêm hai trường vào tệp kê khai của tất cả các JAR phụ thuộc của dự án của tôi trên thời gian xây dựng.Maven: Sửa đổi tệp kê khai phụ thuộc JARs

Lọ phụ thuộc đã được tạo và được kéo từ kho. Tôi cần tìm cách để lấy tệp kê khai của tệp JAR và sau đó sửa đổi nó bằng các biến trong tệp pom hiện tại của tôi. Có ai làm điều này trước khi biết làm thế nào để làm điều này. Cảm ơn trước về thời gian và trả lời của bạn

+6

Tại sao bạn muốn làm điều đó, gây ra những hiện vật đã được xây dựng có nghĩa là nói cách khác không thay đổi. Bạn có thể thay đổi các tạo phẩm đó thông qua sự kết hợp của maven-dependency-plugin và maven-assembly-plugin nhưng nó sẽ tạo ra một tệp pom thực sự lớn. Mặt khác, bạn đang thay đổi các tạo tác đã được xây dựng sẽ chống lại ý tưởng của Maven. – khmarbaise

+0

@Wimpie Bạn đã tìm ra giải pháp chưa? –

+0

'maven-assembly-plugin' cho phép bạn chỉ định cấu hình tệp kê khai, tuy nhiên hiện tại có [bug] (http://jira.codehaus.org/browse/MASSEMBLY-450) ngăn không cho hợp nhất một tệp kê khai hiện có với các mục kê khai bổ sung. Tôi tìm thấy điều này bởi vì tôi đã cố gắng làm điều tương tự và thất bại. – user944849

Trả lời

0

Đây không thực sự là điều mà Maven cho phép bạn thực hiện. Từ quan điểm của Maven, mỗi JAR với một tên cụ thể phải giống hệt như mọi JAR khác có cùng tên.

Ví dụ: giả sử dự án của tôi tùy thuộc vào abc-1.0.jar. Tôi chỉ định sự phụ thuộc này vì nhóm ALphabet đã xuất bản thư viện abc với API được chỉ định cho phiên bản 1.0. Tôi nên có thể lấy tệp jar này từ bất kỳ kho lưu trữ nào trên thế giới, ngay cả từ hàng xóm của tôi xuống đường khi Internet của tôi tắt và tự cài đặt nó vào kho lưu trữ cục bộ của tôi và nó phải chính xác cùng một tệp. Nếu nó không phải là cùng một tập tin, sau đó tôi sẽ không có đảm bảo rằng các tập tin .class bên trong jar sẽ chứa mã thư viện tôi cần để làm cho xây dựng của tôi thành công mà không có lỗi.

Nếu bạn đang thực hiện thực sự để thực hiện công việc này, tốt, về mặt lý thuyết có thể. Bạn có thể viết một kịch bản mà sẽ:

  1. Phân tích XML POM cho phần properties và phân tích ra các tài sản cá nhân từ đó cũng như tên của các lọ phụ thuộc
  2. Đối với mỗi jar phụ thuộc với một bộ phân loại " manifest_injected ", cố gắng tìm nó trong kho lưu trữ cục bộ. Nếu nó không tồn tại, tạo một dự án Maven rỗng với các phụ thuộc đã cho (không có phân loại manifest_injected), chạy mvn validate trên nó để đảm bảo rằng các phụ thuộc đã được tải xuống và đặt trong kho lưu trữ cục bộ nếu chúng được tìm thấy
  3. Sao chép tất cả các tệp JAR đã nói, mở các bản sao, thực hiện việc tạo tệp kê khai mà bạn cần với các thuộc tính mà bạn đã phân tích trước đó và lưu các lọ được tiêm vào các vị trí thích hợp trong kho lưu trữ Maven
  4. Gọi công trình Maven đã được chuyển đến tập lệnh một cuộc tranh cãi.

Chúc may mắn!

0

Bạn có thể làm điều đó dễ dàng trong kho lưu trữ nhị phân của mình. Ví dụ, Artifactory cho phép bạn viết a user plugin that will be triggered on any download. Trong trình lắng nghe này, bạn có thể viết mã của riêng bạn - mở lọ, thay đổi tệp kê khai và phân phối các thay đổi thay vì bản gốc (và lưu nó vào lần sau).

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