Maven 3 cảnh báo về build.plugins.plugin.version


313

Vì tôi đã cập nhật lên Maven 3 nên tôi nhận được các thông báo cảnh báo sau ở mỗi bản dựng:

Làm thế nào tôi có thể thoát khỏi những cảnh báo này?

[INFO] Scanning for projects...
[WARNING] 
[WARNING] Some problems were encountered while building the effective model for proj:id:jar:3.1
[WARNING] 'build.plugins.plugin.version' for org.apache.maven.plugins:maven-javadoc-plugin is missing. @ line 195, column 15
[WARNING] 'build.plugins.plugin.version' for org.apache.maven.plugins:maven-compiler-plugin is missing. @ line 204, column 15
[WARNING] 'build.plugins.plugin.version' for org.apache.maven.plugins:maven-surefire-plugin is missing. @ line 227, column 15
[WARNING] 'build.plugins.plugin.version' for org.apache.maven.plugins:maven-jar-plugin is missing. @ line 215, column 15
[WARNING] 'reporting.plugins.plugin.version' for org.codehaus.mojo:jdepend-maven-plugin is missing. @ line 271, column 15
[WARNING] 
[WARNING] It is highly recommended to fix these problems because they threaten the stability of your build.
[WARNING] 
[WARNING] For this reason, future Maven versions might no longer support building such malformed projects.

1
Trong Maven 3.5.3, đây là một lỗi. Đừng coi thường cảnh báo! Cảm ơn @gavenkoa đã trả lời về cách tìm phiên bản plugin.
JWM

Câu trả lời:


400

Thêm một <version>yếu tố sau <plugin> <artifactId>trong pom.xmltập tin của bạn . Tìm văn bản sau:

<plugin>
  <artifactId>maven-compiler-plugin</artifactId>

Thêm thẻ phiên bản vào nó:

<plugin>
  <artifactId>maven-compiler-plugin</artifactId>
  <version>2.3.2</version>

Cảnh báo nên được giải quyết.

Về vấn đề này:

'build.plugins.plugin.version' cho org.apache.maven.plugins: maven-Trình biên dịch-plugin bị thiếu

Nhiều người đã đề cập tại sao vấn đề đang xảy ra, nhưng không đề xuất cách khắc phục. Tất cả những gì tôi cần làm là vào tệp POM cho dự án của mình và thêm <version>thẻ như hình trên.

Để khám phá số phiên bản, một cách là tìm trong đầu ra của Maven sau khi chạy xong. Nếu bạn thiếu số phiên bản, Maven sẽ hiển thị phiên bản mặc định của nó:

[INFO] --- maven-compiler-plugin:2.3.2:compile (default-compile) @ entities ---

Lấy số phiên bản đó (như ở 2.3.2trên) và thêm nó vào POM của bạn, như được hiển thị.


4
@JBT không hiểu tại sao? Các bản dựng maven có nghĩa là ổn định, do đó, phiên bản nào sẽ sử dụng phải được xác định rõ ràng. Đó là lý do tại sao maven đang yêu cầu nó. Giống như thông báo nói: "Rất khuyến khích khắc phục những sự cố này vì chúng đe dọa sự ổn định của bản dựng của bạn."
eis

3
Đó là một chút của một số lẻ mặc dù bạn chỉ gặp vấn đề này nếu bạn đã thêm một mục cho plugin vào tệp POM dự án. POM hiệu quả có thành phần phiên bản nhưng bạn vẫn cần thêm một yếu tố phiên bản vào POM dự án để loại bỏ cảnh báo này.
oenpelli

2
Tôi nhận được các cảnh báo giống như câu hỏi ban đầu, nhưng pom.xml của tôi không có bất kỳ tham chiếu nào đến maven-Trình biên dịch-plugin. Tôi đang thiếu gì? Cảm ơn!
Vítor E. Silva Souza

3
Không làm việc cho tôi. Thẻ phiên bản plugin đã có.
Erran Morad

4
2.3.2 có phải là phiên bản mới nhất không? Làm thế nào bạn có thể biết cái nào là? Hay nó không quan trọng?
Pocketkid2

84

Chạy như sau:

  $ mvn trợ giúp: mô tả -DartifactId = maven-war-plugin -DgroupId = org.apache.maven.plugins

cho trình cắm không có phiên bản. Bạn nhận được đầu ra:

Tên: Plugin Maven WAR
Mô tả: Xây dựng tệp Lưu trữ ứng dụng web (WAR) từ dự án
  đầu ra và phụ thuộc của nó.
Id nhóm: org.apache.maven.plugins
Artifact Id: maven-war-plugin
Phiên bản: 2.2
Tiền tố mục tiêu: chiến tranh

Sử dụng phiên bản hiển thị trong đầu ra.

CẬP NHẬT Nếu bạn muốn chọn trong số danh sách các phiên bản, hãy sử dụng http://search.maven.org/ hoặc http://mvnreposective.com/ Lưu ý rằng IDE Java yêu thích của bạn phải có hộp thoại tìm kiếm gói Maven . Chỉ cần kiểm tra tài liệu.

CẬP NHẬT SIÊU TÔI cũng sử dụng:

$ mvn dependency:tree
$ mvn dependency:list
$ mvn dependency:resolve
$ mvn dependency:resolve-plugins  # <-- THIS

Gần đây, tôi phát hiện ra cách tải phiên bản mới nhất cho trình cắm (hoặc thư viện) để không còn cần phải tìm kiếm hoặc truy cập Maven Central :

$ mvn versions:display-dependency-updates
$ mvn versions:display-plugin-updates     # <-- THIS

6
+1. Một biến thể thay thế và nhỏ gọn hơn:mvn help:describe -Dplugin=groupId:artifactId
informatik01

3
Quả thực điều này không đưa ra giải pháp nhưng dù sao nó cũng là nội dung có giá trị: làm thế nào người ta thực sự có thể tìm thấy phiên bản được sử dụng / mong đợi. Có lẽ sẽ rất đáng để đề cập đến việc đặt các phiên bản plugin này vào cha mẹ bằng cách sử dụng thẻ pluginQuản lý: stackoverflow.com/a/10483284/1023341
gkephorus


11

lấy thông tin phiên bản mới nhất từ:

https://mvnreposeective.com/artifact/org.apache.maven.plugins/maven-compiler-plugin

nhấp vào phiên bản mới nhất (hoặc phiên bản bạn muốn sử dụng) và bạn sẽ thấy thông tin phụ thuộc (kể từ 2019-05 là phiên bản 3.8.1):

<!-- https://mvnrepository.com/artifact/org.apache.maven.plugins/maven-compiler-plugin -->
<dependency>
  <groupId>org.apache.maven.plugins</groupId>
  <artifactId>maven-compiler-plugin</artifactId>
  <version>3.8.1</version>
</dependency>

bạn có thể muốn sử dụng thẻ phiên bản và nhận xét cho thẻ plugin của mình.

<!-- https://mvnrepository.com/artifact/org.apache.maven.plugins/maven-compiler-plugin -->
<plugin>
    <artifactId>maven-compiler-plugin</artifactId>
    <version>3.8.1</version>
    <configuration>
        <source />
        <target />
    </configuration>
</plugin>

nếu bạn thích, bạn có thể sửa đổi pom của mình để có thông tin phiên bản trong thẻ thuộc tính như được nêu trong câu trả lời khác.


10

Tôi đang sử dụng pom cha cho các dự án của mình và muốn chỉ định các phiên bản ở một nơi, vì vậy tôi đã sử dụng các thuộc tính để chỉ định phiên bản:

cha mẹ

<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/xsd/maven-4.0.0.xsd">
    ....
    <properties>
        <maven-compiler-plugin-version>2.3.2</maven-compiler-plugin-version>
    </properties>
    ....
</project>

dự án pom:

<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/xsd/maven-4.0.0.xsd">
    ....
    <build>
        <finalName>helloworld</finalName>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <version>${maven-compiler-plugin-version}</version>
                <configuration>
                    <source>1.6</source>
                    <target>1.6</target>
                </configuration>
            </plugin>
        </plugins>
    </build>
</project>

Xem thêm: https://www.allthingsdigital.nl/2011/04/10/maven-3-and-the-versions-dilemma/


1
Tôi nghĩ rằng có thể tốt hơn, hoặc ít nhất là tự nhiên hơn, để sử dụng pluginQuản lý cho các phiên bản của plugin.
Jonathan Rosenne

Ngoại trừ khi bạn có một plugin ghi đè Quản lý trong POM con.
Jonathan Rosenne

2

Đó là câu trả lời tuyệt vời ở đây. Và tôi muốn thêm 'Tại sao Thêm một yếu tố trong Maven3'.
Trong Maven 3.x Ghi chú tương thích

Plugin Metaversion Độ phân giải
Trong nội bộ, Maven 2.x đã sử dụng các điểm đánh dấu phiên bản đặc biệt RELEASE và LATEST để hỗ trợ độ phân giải phiên bản plugin tự động. Các siêu dữ liệu này cũng được ghi nhận trong phần tử để khai báo. Vì lợi ích của các bản dựng có thể tái tạo, Maven 3.x không còn hỗ trợ sử dụng các siêu dữ liệu này trong POM. Do đó, người dùng sẽ cần phải thay thế sự xuất hiện của các siêu giao diện này bằng một phiên bản cụ thể.

Và tôi cũng tìm thấy trong maven-Trình biên dịch-plugin - cách sử dụng

Lưu ý: Maven 3.0 sẽ đưa ra cảnh báo nếu bạn không chỉ định phiên bản của plugin.


Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.