2009-10-05 33 views
7

Trong dự án của tôi, tôi tạo nhiều assembly (4-5) và chúng được xuất ra thành target.1/2 của các assembly này không lấy tên cuối cùng (hoặc id assembly), nhưng theo định dạng artifactID-version.jar..Điều này rất khó hiểu Tại sao lại như vậy?Vấn đề với việc tạo lắp ráp

chiết xuất từ ​​pom.xml của tôi -

<project xmlns="http://maven.apache.org/POM/4.0.0" 
     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
     xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd"> 
    <modelVersion>4.0.0</modelVersion> 
    <groupId>com.apple</groupId> 
    <artifactId>maven</artifactId> 
    <name>maven_XX</name> 
    <version>0.0.1-SNAPSHOT</version> 


    <build> 
    <plugins> 
    <!-- Added to avoid the compilation issue wrt Annotations --> 
     <plugin> 
     <groupId>org.apache.maven.plugins</groupId> 
     <artifactId>maven-compiler-plugin</artifactId> 
     <configuration> 
      <source>1.5</source> 
      <target>1.5</target> 
     </configuration> 
     </plugin> 
     <plugin> 
     <groupId>org.apache.maven.plugins</groupId> 
     <artifactId>maven-surefire-plugin</artifactId> 
     <version>2.4.2</version> 
     <configuration> 
      <skip>true</skip> 
     </configuration> 
     </plugin> 
     <plugin> 
     <artifactId>maven-assembly-plugin</artifactId> 
     <version>2.2-beta-4</version> 
     <executions>    
      <execution> 
      <id>clientjar</id> 
      <phase>compile</phase> 
      <goals> 
       <goal>single</goal> 
      </goals> 
      <configuration> 
       <finalName>XX_client</finalName> 
       <appendAssemblyId>false</appendAssemblyId> 
       <descriptors> 
       <descriptor> 
        ${basedir}/src/main/resources/assemblies/clientjar.xml 
       </descriptor> 
       </descriptors> 
      </configuration> 
      </execution> 
      <execution> 
      <id>11***</id> 
      <phase>compile</phase> 
      <goals> 
       <goal>single</goal> 
      </goals> 
      <configuration> 
       <finalName>11server</finalName> 
       <appendAssemblyId>false</appendAssemblyId> 
       <descriptors> 
       <descriptor> 
        ${basedir}/src/main/resources/assemblies/11server.xml 
       </descriptor> 
       </descriptors> 
       <outputDirectory>assemblies-target</outputDirectory> 
      </configuration> 
      </execution> 
      <execution> 
      <id>cache</id> 
      <phase>compile</phase> 
      <goals> 
       <goal>single</goal> 
      </goals> 
      <configuration> 
       <finalName>cache</finalName> 
       <appendAssemblyId>false</appendAssemblyId> 
       <descriptors> 
       <descriptor> 
       ${basedir}/src/main/resources/assemblies/cache.xml 
       </descriptor> 
       </descriptors> 
       <outputDirectory>assemblies-target</outputDirectory> 
      </configuration> 
      </execution> 
+0

Nó không phải là cụm từ ngẫu nhiên.specific không tuân theo. Đầu ra dự kiến ​​cho mỗi lọ là tên cuối cùng được cung cấp. Nhưng tôi nhận được chúng như - Project name-version.jar – user170114

Trả lời

8

Khi bạn chạy assembly, bạn có thấy cái gì đó như sản lượng này để giao diện điều khiển bằng Maven ?:

[INFO] [assembly:single {execution: 11***}] 
[INFO] Reading assembly descriptor: C:\test\test-parent2/src/main/resources/assemblies/11server.xml 
[INFO] Building jar: C:\test\test-parent2\assemblies-target\11server.jar 
[WARNING] Configuration options: 'appendAssemblyId' is set to false, and 'classifier' is missing. 
Instead of attaching the assembly file: C:\test\test-parent2\assemblies-target\11server.jar, it will become the file for 
main project artifact. 
NOTE: If multiple descriptors or descriptor-formats are provided for this project, the value of this file will be non-de 
terministic! 

Điều này xảy ra bởi vì tất cả các hội đồng của bạn chỉ định <appendAssemblyId>false</appendAssemblyId> và không có trình phân loại nào được chỉ định. Trình phân loại không được chấp nhận trong phiên bản 2.2-beta-4 nên bị bỏ qua, đây là lỗi/tính năng trong plugin.
Kết quả là, Maven sẽ luôn làm cho một trong những hội đồng tạo tác "chính" cho bao bì jar, và bạn không thấy nó trong thư mục hội đồng mục tiêu của bạn.

Để giải quyết vấn đề này, bạn có thể chỉ định rằng dự án của bạn có bao bì pom, sau đó ràng buộc các mục tiêu cho vòng đời của jar vào pom.

Để bật mục tiêu process-resourcescompile bạn sẽ thay đổi bao bì thành pom, thêm cấu hình sau vào pom của bạn và chạy các mục tiêu vòng đời tiêu chuẩn. Ví dụ: mvn package hoặc mvn install.

<plugin> 
    <artifactId>maven-resources-plugin</artifactId> 
    <executions>    
    <execution> 
     <id>process-resources</id> 
     <phase>process-resources</phase> 
     <goals> 
     <goal>resources</goal> 
     </goals> 
    </execution> 
    </executions> 
</plugin> 
<plugin> 
    <artifactId>maven-compiler-plugin</artifactId> 
    <executions>    
    <execution> 
     <id>compile</id> 
     <phase>compile</phase> 
     <goals> 
     <goal>compile</goal> 
     </goals> 
    </execution> 
    </executions> 
</plugin> 

Danh sách đầy đủ các mục tiêu ràng buộc với vòng đời jar có thể được tìm thấy trong Được xây dựng vào Vòng đời Bindings phần của Introduction to the Build Lifecycle. Tất cả đều theo một mẫu tương tự với mục tiêu process-resourcescompile. Trong trường hợp của bạn, bạn có thể muốn bỏ qua mục tiêu jar.

+0

Hi Khi chạy assembly, tôi sẽ nhận được cảnh báo như bạn đã đưa ra. Vì vậy, u có nghĩa là để nói rằng tôi shud sử dụng mục tiêu = biên dịch cho các hội đồng (trong đó cung cấp cho lọ) và cho phép các mục tiêu biên dịch maven? – user170114

+0

Không, tôi có nghĩa là làm cho bao bì của dự án "pom" và cấu hình các plugin sao cho các mục tiêu được thực thi trong vòng đời của jar được thực thi trong vòng đời của pom, với cấu hình ở trên tài nguyên và các trình biên dịch sẽ được thực thi trong vòng đời mặc định. bạn vẫn chạy 'mvn install'.Điều này làm tròn lỗi trong plugin lắp ráp –

+0

Hi .. Tôi đã thay đổi bao bì thành "pom" .Thêm hai plugin bạn đã cung cấp và không thực hiện bất kỳ thay đổi cấu hình nào cho assembly.On running mvn install, cho lần 2 lắp ráp, nó được cho- Gây ra bởi: org.apache.maven.project.DuplicateArtifactAttachmentException: Đã phát hiện tệp đính kèm trùng lặp trùng lặp. – user170114

11

Kéo nhận xét của Lyle ra cấp độ câu hỏi để cung cấp khả năng hiển thị.

Trong khi câu trả lời trước công Lyle điểm ra rằng:

Nếu tôi hiểu được điều này một cách chính xác, nó có vẻ như một cách giải quyết phần nào xâm lấn cho những gì số tiền để một lỗi trong plugin lắp ráp. Thay vào đó, hãy thử đặt sai trong cấu hình. Xem: MASSEMBLY-352

Đối với các hiện vật không gắn với phân phối kho lưu trữ, đây là giải pháp tốt và hoạt động tốt cho tôi.

... 
<appendAssemblyId>false</appendAssemblyId> 
<attach>false</attach> 
... 
+2

Hoạt động tốt cho một dự án "lắp ráp đơn". –