2009-12-13 23 views
15

Tôi có dự án maven2 với vài mô-đun jar, xây dựng dự án sẽ nhận được lưu trữ .jar cho mỗi mô-đun trong các mô-đun thư mục/XYZ/target/XYZ-xxxjarLàm cách nào để trộn các lọ mô-đun vào một cái bình trong Maven2?

Bây giờ, nếu dự án P của tôi là phiên bản Pp .qr, và tôi muốn tạo ra một jar duy nhất Pp.qr-all.jar với tất cả các mô-đun con được đưa vào, tôi nên làm như thế nào?

Trả lời

18

Điều bạn muốn đạt được được gọi là uber jar. Mô-đun này phải có sự phụ thuộc của tất cả các mô-đun con khác mà bạn muốn gói vào một cái bình. Nếu bạn tạo một mô-đun con khác để tạo ra một tạo tác mong muốn, nó có thể được xây dựng trong lò phản ứng với tất cả các phụ thuộc của nó, nhưng nếu nó là một dự án riêng biệt, bạn phải cài đặt tất cả các phụ thuộc của uber jar.

| parent 
| -- submodule1 
... 
| -- submoduleN 
| -- uberjarSubmodule 

Uber jar thể được thực hiện bằng cách sử dụng:

  1. maven-shade-plugin - trong trường hợp của bạn, bạn cần phải nhớ để loại trừ dependecies bắc cầu từ các module của bạn

    <project> 
    ... 
    <build> 
    <plugins> 
        <plugin> 
        <groupId>org.apache.maven.plugins</groupId> 
        <artifactId>maven-shade-plugin</artifactId> 
        <version>1.2.2</version> 
        <executions> 
         <execution> 
         <phase>package</phase> 
         <goals> 
          <goal>shade</goal> 
         </goals> 
         <configuration> 
          <artifactSet> 
          <excludes> 
           <exclude>classworlds:classworlds</exclude> 
           <exclude>junit:junit</exclude> 
           <exclude>jmock:jmock</exclude> 
           <exclude>xml-apis:xml-apis</exclude> 
          </excludes> 
          </artifactSet> 
         </configuration> 
         </execution> 
        </executions> 
        </plugin> 
    </plugins> 
    </build> 
    ... 
    </project> 
    
  2. maven-assembly-plugin - trong this câu hỏi bạn sẽ tìm thấy câu trả lời chi tiết

+0

màu trông giống như một plugin tuyệt vời. – Clinton

1

Phụ thuộc vào cách bạn định gửi gói này, nếu bình của bạn là thư viện mà bạn muốn các nhà phát triển khác tải xuống và sử dụng qua maven. Bạn nên xác định những số này là dependencies trong các dự án pom.

Nếu bạn đang cố gắng chuyển thứ gì đó cho người dùng cuối chỉ muốn lấy tệp nhị phân và sử dụng dự án của mình, bạn có thể thử sử dụng plugin assembly để gói dự án của mình. Với plugin này, bạn có thể đóng gói một lọ bên cạnh các phụ thuộc của nó. Nó sẽ không đặt tất cả trong một tệp jar duy nhất, nhưng giả sử bạn cấu hình đường dẫn lớp người dùng một cách chính xác nó không quan trọng.

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