Maven 3 คำเตือนเกี่ยวกับ build.plugins.plugin.version


313

ตั้งแต่ฉันอัปเดตเป็น Maven 3 ฉันได้รับข้อความเตือนต่อไปนี้ในแต่ละบิลด์:

ฉันจะกำจัดคำเตือนเหล่านี้ได้อย่างไร

[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
ใน Maven 3.5.3 นี่เป็นข้อผิดพลาด อย่าเพิกเฉยต่อคำเตือน! ขอบคุณ @gavenkoa สำหรับคำตอบเกี่ยวกับวิธีค้นหารุ่นปลั๊กอิน
jwm

คำตอบ:


400

เพิ่ม<version>องค์ประกอบหลังจาก<plugin> <artifactId>ในpom.xmlไฟล์ของคุณ ค้นหาข้อความต่อไปนี้:

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

เพิ่มแท็กเวอร์ชันลงใน:

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

คำเตือนควรได้รับการแก้ไข

เกี่ยวกับเรื่องนี้:

'build.plugins.plugin.version' สำหรับ org.apache.maven.plugins: maven-compiler-plugin หายไป

หลายคนได้กล่าวถึงสาเหตุของปัญหา แต่ไม่สามารถแนะนำวิธีแก้ไขได้ สิ่งที่ฉันต้องทำก็คือเข้าไปที่ไฟล์ POM สำหรับโครงการของฉันและเพิ่ม<version>แท็กตามที่แสดงด้านบน

เมื่อต้องการค้นหาหมายเลขรุ่นวิธีหนึ่งคือดูผลลัพธ์ของ Maven หลังจากที่เสร็จสิ้นการทำงาน ที่ที่คุณไม่มีหมายเลขเวอร์ชัน Maven จะแสดงเวอร์ชันเริ่มต้น:

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

ใช้หมายเลขเวอร์ชันดังที่แสดง2.3.2ไว้ด้านบนแล้วเพิ่มลงใน POM ของคุณตามที่แสดง


4
@JBT ไม่เข้าใจว่าทำไม maven builds มีความหมายว่ามั่นคงดังนั้นควรใช้คำจำกัดความของรุ่นใด นั่นคือสาเหตุที่ maven ร้องขอมัน เช่นเดียวกับข้อความที่พูดว่า "ขอแนะนำเป็นอย่างยิ่งให้แก้ไขปัญหาเหล่านี้เพราะพวกเขาคุกคามความมั่นคงของงานสร้างของคุณ"
eis

3
มันเป็นบิตที่แปลกแม้ว่าคุณจะได้รับปัญหานี้ถ้าคุณได้เพิ่มรายการสำหรับปลั๊กอินไปยังไฟล์โครงการ POM POM ที่มีประสิทธิภาพมีองค์ประกอบรุ่น แต่คุณยังคงต้องเพิ่มองค์ประกอบรุ่นลงใน POM โครงการเพื่อลบคำเตือนนี้
oenpelli

2
ฉันได้รับคำเตือนเหมือนกับคำถามเดิม แต่ pom.xml ของฉันไม่มีการอ้างอิงถึง maven-compiler-plugin ฉันพลาดอะไรไป ขอบคุณ!
Vítor E. Silva Souza

3
ไม่ได้ผลสำหรับฉัน แท็กเวอร์ชันปลั๊กอินมีอยู่แล้ว
Erran Morad

4
2.3.2 เป็นรุ่นล่าสุดหรือไม่ คุณจะบอกได้อย่างไรว่าอันไหนคือ? หรือมันไม่สำคัญ
Pocketkid2

84

ทำงานเหมือน:

  $ mvn help: อธิบาย -DartifactId = maven-war-plugin -DgroupId = org.apache.maven.plugins

สำหรับปลั๊กอินที่ไม่มีรุ่น คุณได้รับผลลัพธ์:

ชื่อ: ปลั๊กอิน Maven WAR
คำอธิบาย: สร้างไฟล์ Web Application Archive (WAR) จากโครงการ
  เอาท์พุทและการอ้างอิงของมัน
รหัสกลุ่ม: org.apache.maven.plugins
Id Artifact: maven-war-plugin
เวอร์ชั่น: 2.2
คำนำหน้าเป้าหมาย: สงคราม

ใช้เวอร์ชันที่แสดงในเอาต์พุต

UPDATEหากคุณต้องการที่จะเลือกในรายการรุ่นใช้http://search.maven.org/หรือhttp://mvnrepository.com/หมายเหตุที่ชื่นชอบของคุณ Java IDE ต้องมีโต้ตอบการค้นหาแพคเกจ Maven เพียงตรวจสอบเอกสาร

ปรับปรุงล่าสุดฉันยังใช้:

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

เมื่อเร็ว ๆ นี้ฉันค้นพบวิธีรับเวอร์ชันล่าสุดสำหรับปลั๊กอิน (หรือไลบรารี) ดังนั้นไม่จำเป็นต้องใช้ googling หรือไปที่Maven Centralอีกต่อไป:

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

6
+1 ตัวแปรทางเลือกและกะทัดรัดอื่น ๆ :mvn help:describe -Dplugin=groupId:artifactId
informatik01

3
อันที่จริงสิ่งนี้ไม่ได้ให้ทางออก แต่เป็นเนื้อหาที่มีค่าอยู่แล้ว: เราจะหาเวอร์ชั่นที่ใช้ / คาดหวังได้อย่างไร บางทีมันอาจจะคุ้มค่าที่จะพูดถึงการวางปลั๊กอินเวอร์ชันเหล่านี้ใน parent-pom โดยใช้ pluginManagement-tag: stackoverflow.com/a/10483284/1023341
gkephorus

14

Maven 3 มีข้อ จำกัด มากขึ้นกับโครงสร้าง POM คุณต้องตั้งค่าเวอร์ชันของปลั๊กอินเช่น

ด้วย maven 3.1 คำเตือนเหล่านี้อาจทำลายคุณสร้าง มีการเปลี่ยนแปลงเพิ่มเติมระหว่าง maven2 และ maven3: https://cwiki.apache.org/confluence/display/MAVEN/Maven+3.x+Compatibility+Notes


11

รับข้อมูลเวอร์ชั่นล่าสุดจาก:

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

คลิกที่เวอร์ชันล่าสุด (หรือเวอร์ชันที่คุณต้องการใช้) และคุณจะเห็นข้อมูลการพึ่งพา (ตั้งแต่ 2019-05 เป็น 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>

คุณอาจต้องการใช้แท็กเวอร์ชันและความคิดเห็นสำหรับแท็กปลั๊กอินของคุณ

<!-- 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>

ถ้าคุณชอบคุณสามารถแก้ไข pom ของคุณเพื่อให้มีข้อมูลรุ่นในแท็กคุณสมบัติตามที่ระบุไว้ในคำตอบอื่น


10

ฉันกำลังใช้ pom พาเรนต์สำหรับโครงการของฉันและต้องการระบุเวอร์ชันในที่เดียวดังนั้นฉันจึงใช้คุณสมบัติเพื่อระบุเวอร์ชัน:

ผู้ปกครอง 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">
    ....
    <properties>
        <maven-compiler-plugin-version>2.3.2</maven-compiler-plugin-version>
    </properties>
    ....
</project>

โครงการป้อม:

<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>

ดูเพิ่มเติมที่: https://www.allthingsdigital.nl/2011/04/10/maven-3-and-the-versions-dilemma/


1
ฉันคิดว่ามันอาจจะดีกว่าหรืออย่างน้อยก็เป็นธรรมชาติกว่าสำหรับการใช้ pluginManagement สำหรับรุ่นของปลั๊กอิน
Jonathan Rosenne

ยกเว้นเมื่อคุณมีการจัดการปลั๊กอินที่สำคัญใน child POM
Jonathan Rosenne

2

มันเป็นคำตอบที่ยอดเยี่ยมที่นี่ และฉันต้องการเพิ่ม 'ทำไมเพิ่มองค์ประกอบใน Maven3'
ในหมายเหตุความเข้ากันได้ของ Maven 3.x

การแก้ปัญหา Metaversion ปลั๊กอิน
ภายใน Maven 2.x ใช้เครื่องหมายรุ่นพิเศษ RELEASE และ LATEST เพื่อสนับสนุนการแก้ปัญหาเวอร์ชันปลั๊กอินอัตโนมัติ ตัวชี้วัดเหล่านี้ยังได้รับการยอมรับในองค์ประกอบสำหรับการประกาศ เพื่อประโยชน์ในการสร้างซ้ำ Maven 3.x ไม่สนับสนุนการใช้งาน metaverions เหล่านี้ใน POM อีกต่อไป ดังนั้นผู้ใช้จะต้องแทนที่การเกิดขึ้นของ metaverions เหล่านี้ด้วยเวอร์ชันที่เป็นรูปธรรม

และฉันยังพบในmaven-compiler-plugin - การใช้งาน

หมายเหตุ: Maven 3.0 จะออกคำเตือนหากคุณไม่ได้ระบุรุ่นของปลั๊กอิน


โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.