2009-08-25 4 views
15

Tôi sử dụng plugin lắp ráp để tạo một số lọ với một số lớp trong đó. Tôi cần tên tùy chỉnh cho các lọ kết quả: app_business.jarapp_gui.jarcore.jar, vvMaven-assembly-plugin: tên tệp jar tùy chỉnh

Hiện nay tôi phải cấu hình sau:

<plugin> 
    <artifactId>maven-assembly-plugin</artifactId> 
    <configuration> 
     <appendAssemblyId>false</appendAssemblyId> 
    <finalName>app_business</finalName> 
     <descriptors> 
      <descriptor>assembly.xml</descriptor> 
     </descriptors> 
     <attach>true</attach> 
    </configuration> 
    <executions> 
     <execution> 
      <id>make-assembly</id> 
      <phase>package</phase> 
      <goals> 
       <goal>single</goal> 
      </goals> 
     </execution> 
    </executions> 
</plugin> 

một file assembly.xml :

<assembly> 
     <id>app_business</id> 
     <formats> 
     <format>jar</format> 
     </formats> 
     <baseDirectory>target</baseDirectory> 
     <includeBaseDirectory>false</includeBaseDirectory> 

     <fileSets> 
     <fileSet> 
      <directory>${project.build.outputDirectory}</directory> 
      <outputDirectory></outputDirectory> 
      <includes> 
      <include>org/xyz/**</include> 
      </includes> 
     </fileSet>  
     </fileSets> 
    </assembly> 

điều này tạo ra một tập tin app_business.jar đó là hoàn hảo . Nhưng tôi không có ý tưởng làm thế nào để tạo các tập tin khác của tôi. Tùy chọn appendAssemblyId không giúp tôi, vì nó tạo tên tệp theo định dạng AppName-app_business.jar. Tôi thực sự cần tên tệp chính xác app_business.jar.

Bất kỳ ý tưởng nào? Cảm ơn nhiều!

Trả lời

-1

Plugin maven tiêu chuẩn dành cho công việc chung, lặp đi lặp lại. Họ thu thập tất cả thông tin từ POM và họ thông minh (theo nghĩa là bạn không cần cấu hình nhiều).

Nếu bạn cần các tác vụ đặc biệt, tôi khuyên bạn nên sử dụng ant plugin cho phép bạn nhúng một đoạn mã Ant vào POM. Điều này cho phép bạn chạy jar task.

+0

Tôi không thích trộn các tác vụ kiến ​​và quạ. Dù sao, bằng cách sử dụng các tác vụ kiến ​​cần cấu hình xml ít hơn nhiều. (khoảng 20 dòng cho công việc của tôi) – Synox

+3

@Synox, bạn không nên tránh các plugin antrun, nó rất hữu ích để điền vào những khoảng trống trong Maven mà không cần lăn plugin của riêng bạn. Tôi chỉ có xu hướng tìm thấy rằng mọi người là một liên lạc quá quan tâm để sử dụng nó khi có nhiều Mavenic (? Bất cứ điều gì, tương đương Maven của Pythonic) cách để làm điều đó. Trong trường hợp này tôi nghĩ rằng các plugin lắp ráp * nên * là một phù hợp hơn, nhưng như bạn có thể nhìn thấy từ câu trả lời của tôi, có vẻ như vẫn còn một vài vấn đề với nó dừng nó hoạt động chính xác như OP muốn. –

+0

Nó rất dễ dàng để cuộn maven plugin bằng cách sử dụng kiến. –

38

Bạn có thể di chuyển phần tử cấu hình bên dưới phần tử thực thi của khai báo plugin. Điều này có nghĩa là cấu hình sẽ chỉ được áp dụng cho việc thực thi đó. Sau đó, bạn có thể thêm các thực thi bổ sung của plugin assembly cho các assembly khác của bạn.

Dưới đây là một ví dụ về cấu hình thay đổi với hai hành quyết, từng tham khảo một hội đồng khác nhau:

<plugin> 
    <artifactId>maven-assembly-plugin</artifactId> 
    <executions> 
    <execution> 
     <id>make-business-assembly</id> 
     <phase>package</phase> 
     <goals> 
     <goal>single</goal> 
     </goals> 
     <configuration> 
     <appendAssemblyId>false</appendAssemblyId> 
     <finalName>app_business</finalName> 
     <descriptors> 
      <descriptor>src/main/assembly/business-assembly.xml</descriptor> 
     </descriptors> 
     <attach>true</attach> 
     </configuration> 
    </execution> 
    <execution> 
     <id>make-gui-assembly</id> 
     <phase>package</phase> 
     <goals> 
     <goal>single</goal> 
     </goals> 
     <configuration> 
     <appendAssemblyId>false</appendAssemblyId> 
     <finalName>app_gui</finalName> 
     <descriptors> 
      <descriptor>src/main/assembly/gui-assembly.xml</descriptor> 
     </descriptors> 
     <attach>true</attach> 
     </configuration> 
    </execution> 
    </executions> 
</plugin> 

Với cấu hình này, hai lọ bổ sung (ứng dụng _business.jar và ứng dụng _gui.jar) sẽ được tạo trong thư mục đích, mặc dù được biết nếu bạn cài đặt dự án, chỉ có phần tạo tác cuối cùng được cài đặt sẽ được cài đặt (điều này tất nhiên có thể là một vấn đề).

Để tránh điều này, bạn cần phải thay đổi thuộc tính appendAssemblyId thành đúng. Trường hợp gần nhất bạn có thể nhận được trong trường hợp này là thay đổi finalNames thành "app" và các ID thành "gui" và "business", kết quả là app-gui.jar và app-business.jar đang được đóng gói và tất cả các tạo phẩm đang được cài đặt.

+0

Xin cảm ơn vì đã trả lời rất nhanh! hoạt động.như bạn đã nói có những cảnh báo trên bàn điều khiển và phần tạo tác cuối cùng trở thành tạo phẩm chính. Tôi có thể sống với điều đó, nhưng tôi đã hoàn thành các cảnh báo trên bảng điều khiển. Có cách nào để ẩn chúng (hoặc cấu hình lắp ráp để làm như vậy)? – Synox

+0

cảnh báo là gì? Phần cuối cùng của câu trả lời của tôi đề cập đến vấn đề vật chính, nếu bạn có thể đứng để thay đổi từ dấu gạch dưới để dấu gạch nối –

+1

Những cảnh báo là: [CẢNH BÁO] Cấu hình tùy chọn: 'appendAssemblyId' được thiết lập là false, và 'phân loại' là mất tích . Thay vì đính kèm tệp lắp ráp: ... \ app_business.jar, nó sẽ trở thành tệp cho tạo tác dự án chính. LƯU Ý: Nếu nhiều mô tả hoặc định dạng mô tả được cung cấp cho dự án này, giá trị của tệp này sẽ không xác định! [CẢNH BÁO] Thay thế tệp dự án chính có sẵn của dự án: ... \ app_gui.jar với tệp lắp ráp: .... \ app_gui.jar Tôi muốn tránh phải thay đổi từ gạch dưới thành dấu gạch ngang. Nhưng nếu tôi không thể tránh ... giải pháp này là khá tốt đẹp. – Synox