2016-12-04 16 views
9

Plugin Maven JAR (phiên bản 3.0.2) tiếp tục ném lỗi sau, ngay cả đối với một lệnh gọi duy nhất mục tiêu jar:Maven JAR Plugin 3.0.2 Lỗi: Bạn phải sử dụng trình phân loại để đính kèm các tạo phẩm bổ sung cho dự án thay vì thay thế chúng

[ERROR] Failed to execute goal org.apache.maven.plugins:maven-jar-plugin:3.0.2:jar (default) on project test: You have to use a classifier to attach supplemental artifacts to the project instead of replacing them. -> [Help 1]

Dưới đây là một (tối thiểu?) pom.xml đó chứng tỏ vấn đề:

<project xmlns="http://maven.apache.org/POM/4.0.0"> 
    <modelVersion>4.0.0</modelVersion> 

    <groupId>test</groupId> 
    <artifactId>test</artifactId> 
    <version>1.0.0-SNAPSHOT</version> 

    <build> 
    <plugins> 
     <plugin> 
     <artifactId>maven-jar-plugin</artifactId> 
     <version>3.0.2</version> 
     <executions> 
      <execution> 
      <goals> 
       <goal>jar</goal> 
      </goals> 
      </execution> 
     </executions> 
     </plugin> 
    </plugins> 
    </build> 
</project> 

các invocation chỉ mvn package là.

  • Dường như không có bất kỳ lớp học/tài nguyên nào - thông báo lỗi ở trên vẫn xuất hiện.
  • Sự cố cũng xuất hiện nếu hai mục tiêu được chỉ định (jartest-jar).
  • Sự cố KHÔNG xuất hiện nếu không có mục tiêu được chỉ định. Nhưng đây không phải là một lựa chọn, vì tôi thực sự cần cả hai jartest-jar.

Theo documentation, classifier chỉ cần được xác định trên nhiều lời gọi của cùng một mục tiêu, và có một mặc định hợp lý cho mục tiêu test-jar mà tôi không có ý định thay đổi.

Ngoài ra, sự cố dường như không xuất hiện trên dòng 2.x của plugin JAR.

Tôi đã bỏ lỡ điều gì đó? Có ai vui lòng đề nghị những gì tôi đang làm sai?

P.S. Phiên bản Maven là 3.3.9.

Trả lời

18

Plugin Jar thực sự nhận được thực hiện hai lần với cấu hình:

<plugin> 
    <artifactId>maven-jar-plugin</artifactId> 
    <version>3.0.2</version> 
    <executions> 
    <execution> 
     <goals> 
     <goal>jar</goal> 
     </goals> 
    </execution> 
    </executions> 
</plugin> 

Nếu bạn kiểm tra các bản ghi với cấu hình như vậy, bạn sẽ có một cái gì đó như:

[INFO] --- maven-jar-plugin:3.0.2:jar (default-jar) @ test --- 
[INFO] Building jar: ...\test\target\test-0.0.1-SNAPSHOT.jar 
[INFO] 
[INFO] --- maven-jar-plugin:3.0.2:jar (default) @ test --- 
[INFO] ------------------------------------------------------------------------ 
[INFO] BUILD FAILURE 
[INFO] ------------------------------------------------------------------------ 

nghĩa là các plugin thực ra đã được thực hiện hai lần. Điều gì xảy ra, là Jar Plugin, trong một dự án có một bao bì của jarhas a default execution bound to the package phase. Việc thực thi mặc định này là thực hiện được đề cập trong nhật ký có ID là default-jar.

Khi bạn định cấu hình một <execution> trong plugin, bạn thực sự đã định cấu hình thực thi mới, trong đó mục tiêu jar của plugin sẽ được gọi. Kể từ khi jar goal binds by default to the package phase, việc thực hiện đó được thực thi tại giai đoạn đó, sau khi ràng buộc mặc định vốn có với bao bì jar. Và kể từ khi plugin đã chạy, nó không thành công bởi vì chạy nó một lần nữa sẽ thực sự thay thế tạo tác chính đã được sản xuất trong lần chạy đầu tiên. Lỗi này đã được thêm vào trong phiên bản 3.0.0 của plugin trong MJAR-198, bởi vì một điều như vậy xảy ra rất có thể là một cấu hình sai cần được phát hiện sớm.

Như vậy, sửa chữa rất đơn giản: không có thực thi xác định mục tiêu jar và để mặc định (đến từ bao bì jar) thực hiện công việc. JAR sẽ vẫn được tạo, ngay cả khi không có cấu hình rõ ràng của mục tiêu jar, nhờ vào việc thực thi mặc định. Nếu bạn muốn có một JAR thử nghiệm là tốt, you will still need to configure the plugin to do that với:

<plugin> 
    <artifactId>maven-jar-plugin</artifactId> 
    <version>3.0.2</version> 
    <executions> 
    <execution> 
     <goals> 
     <goal>test-jar</goal> 
     </goals> 
    </execution> 
    </executions> 
</plugin> 

Nhưng lưu ý rằng mục tiêu jar không được xác định.

+0

Điều này đã khắc phục được sự cố. Cảm ơn bạn đã giải thích chi tiết. –

+0

Tôi gặp vấn đề tương tự và lỗi này không giúp tôi. Cảm ơn bạn! – Stanislav

+0

Cảm ơn lời giải thích - Tôi đã gặp sự cố mặc dù tôi đã đặt gói thành "chiến tranh" (và không phải "jar"), nhưng xóa gói bên trong plugin jar đã khắc phục sự cố. – Vering

0

Trong trường hợp của tôi, tôi đã thiết lập ID của thực thi là jar mặc định, sau đó lỗi sẽ biến mất. ví dụ.

<execution> 
    <id>default-jar</id> 
    <phase>package</phase> 
    <goals> 
     <goal>jar</goal> 
    </goals> 
</execution> 
+0

Điều đó "hoạt động" nhưng dựa trên thực tế là có 'default-jar' khi ID thực thi ghi đè thực thi mặc định từ bao bì' jar'. Đây là một chút của một hack, và có một giải pháp tốt hơn. – Tunaki

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