2010-03-25 34 views
25

Tôi muốn tạo một kho lưu trữ zip của thư mục "đích" ($ {project.build.directory). sử dụng maven-assembly-plugin có vẻ như tôi quá mức cần thiết cho một nhiệm vụ đơn giản (và một chút phức tạp - tại sao tôi phải sử dụng một tệp khác, bộ mô tả lắp ráp, cho một tác vụ như vậy) Tôi không thể định vị đơn giản hơn maven-zip-plugin trong kho lưu trữ http://repo1.maven.org/maven2.Tạo một kho lưu trữ zip của thư mục "đích" maven

Mọi đầu vào?

Trả lời

47

Nếu bin mô tả lắp ráp được xác định trước không phù hợp với nhu cầu của bạn, sau đó bạn có ba lựa chọn:

  1. Sử dụng maven-lắp ráp-Plugin - Các maven-zip-plugin không bao giờ xuất hiện vì các plugin lắp ráp có thể làm mọi thứ mà plugin zip đang thực hiện và hơn thế nữa, xem MNG-2243.
  2. Sử dụng trình cắm maven-antrun (và có thể là plugin trợ giúp xây dựng để đính kèm mã zip) - Có một ví dụ here (và điều này có vẻ chi tiết hơn plugin lắp ráp ở cuối).
  3. Viết plugin của riêng bạn - tại sao bạn sẽ làm điều này khi bạn có plugin lắp ráp.

Cá nhân, tôi sẽ chỉ cần sử dụng maven-lắp ráp-plugin với zip.xml mô tả như sau:

<assembly xmlns="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xsi:schemaLocation="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.0 http://maven.apache.org/xsd/assembly-1.1.0.xsd"> 
    <id>bin</id> 
    <baseDirectory>/</baseDirectory> 
    <formats> 
    <format>zip</format> 
    </formats> 
    <fileSets> 
    <fileSet> 
     <directory>${project.build.directory}</directory> 
    </fileSet> 
    </fileSets> 
</assembly> 

Và trong POM của bạn:

<plugin> 
    <artifactId>maven-assembly-plugin</artifactId> 
    <version>2.6</version> 
    <configuration> 
    <descriptors> 
     <descriptor>src/main/assembly/zip.xml</descriptor> 
    </descriptors> 
    </configuration> 
    <executions> 
    <execution> 
     <id>make-assembly</id> <!-- this is used for inheritance merges --> 
     <phase>package</phase> <!-- append to the packaging phase. --> 
     <goals> 
     <goal>single</goal> <!-- goals == mojos --> 
     </goals> 
    </execution> 
    </executions> 
</plugin> 
+0

Không hoạt động - được xây dựng trong "bin" là đã sử dụng. Và tôi không thể tìm ra cách để trỏ tới tùy chỉnh không được tích hợp sẵn. –

+0

Có một lợi thế của việc sử dụng plugin antrun trên plugin lắp ráp vì nó lưu trữ các kích thước tệp khác nhau bên trong mã zip.Nếu bạn đang đọc mã zip với 'ZipInputStream' và sử dụng 'getSize()', bạn sẽ nhận được kích thước mục nhập bằng các khóa được tạo bởi antrun, đối với các khóa được tạo bằng assembly, nó trả về -1. –

11

Nếu bạn không có bất kỳ nhu cầu "đặc biệt" nào đối với tệp .zip được tạo, bạn có thể sử dụng một trong các bộ mô tả Maven Assembly được xác định trước. Các bộ mô tả lắp ráp được xác định trước giúp dễ dàng và dễ dàng tạo ra các assembly cụ thể mà không cần phải cung cấp bộ mô tả lắp ráp của riêng bạn. Giả sử bạn muốn sử dụng mô tả bin được xác định trước. Sau đó, trong phần plugins trong phần build của POM, bạn chỉ có thể thêm phần sau đây.

<plugin> 
    <artifactId>maven-assembly-plugin</artifactId> 
    <version>2.6</version> 
    <configuration> 
    <descriptorRefs> 
     <descriptorRef>bin</descriptorRef> 
    </descriptorRefs> 
    </configuration> 
</plugin> 

Tất nhiên, như mọi khi với Maven, nếu bạn muốn làm điều gì đó ngoài cấu hình mặc định, bạn sẽ phải tạo cấu hình riêng của mình, và trong trường hợp này, có nghĩa là mô tả lắp ráp của riêng bạn.

Danh sách các mô tả được xác định trước được ghi thành tài liệu here.

+0

Không lựa chọn tồi. Tuy nhiên, vào cuối quá trình của tôi, thư mục đích chỉ chứa một tệp exe và một thư mục với các tệp exe khác - al linstallers. Tôi chỉ đơn giản muốn nén tất cả chúng lại với nhau – Yaneeve

+0

Vì vậy, rắc rối của bạn là các mô tả mặc định sẽ đóng gói nhiều hơn bạn cần, chẳng hạn như nội dung của thư mục làm việc, vv? Có phải trường hợp có một thư mục cụ thể dưới mục tiêu mà bạn muốn đóng gói (ví dụ: '$ {project.build.directory}/installers') nhưng bạn muốn bỏ qua các thư mục khác? Hay bạn có mục tiêu nào khác? – RTBarnard

+0

Tôi đã xóa tất cả các tệp và thư mục không mong muốn khỏi thư mục $ {project.build.directory} và chỉ muốn nén hoàn toàn nội dung của nó. Nếu bạn không có một đề nghị tốt hơn so với Pascal của tôi đoán tôi sẽ chỉ cần tạo ra rằng tập tin lắp ráp "dư thừa" như ông đã cho thấy và lựa chọn giải pháp của mình ... – Yaneeve

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