pluginManagement คืออะไรใน pom.xml ของ Maven


266

นี่เป็นตัวอย่างไฟล์ pom ของฉัน

....
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-dependency-plugin</artifactId>
                <version>2.4</version>                        
                <executions>
                    <execution>
                        <phase>install</phase>
                        <goals>
                            <goal>copy-dependencies</goal>
                        </goals>
                        <configuration>
                            ......
                        </configuration>
                    </execution>
                </executions>
            </plugin>
        </plugins>
...

ฉันใช้มันสำเร็จด้วยคำสั่ง

mvn install

แต่เมื่อฉันพยายามใส่มันลงในแท็ก "pluginManagement" การmaven-dependency-pluginหยุดทำงานเมื่อฉันเริ่มต้นinstallเป้าหมาย ทำไมแท็ก "pluginManagement" จึงเปลี่ยนพฤติกรรมการสร้าง หรือฉันควรใช้เป้าหมายหรือตัวเลือกอื่น

คำตอบ:


299

คุณยังต้องเพิ่ม

<plugins>
    <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-dependency-plugin</artifactId>
    </plugin>
</plugins>

ในงานสร้างของคุณเนื่องจากpluginManagementเป็นเพียงวิธีการแชร์การกำหนดค่าปลั๊กอินเดียวกันในโมดูลโครงการทั้งหมดของคุณ

จากเอกสาร Maven:

pluginManagement : เป็นองค์ประกอบที่เห็นตามปลั๊กอินด้านข้าง การจัดการปลั๊กอินมีองค์ประกอบปลั๊กอินในลักษณะเดียวกันยกเว้นว่าแทนที่จะกำหนดค่าข้อมูลปลั๊กอินสำหรับบิลด์โปรเจ็กต์นี้โดยเฉพาะมันมีวัตถุประสงค์เพื่อกำหนดคอนฟิกบิวด์โปรเจ็กต์ที่สืบทอดจากอันนี้ อย่างไรก็ตามนี่เป็นเพียงการกำหนดค่าปลั๊กอินที่อ้างอิงจริงภายในองค์ประกอบปลั๊กอินในชายน์ เด็ก ๆ มีสิทธิ์ที่จะแทนที่คำจำกัดความการจัดการปลั๊กอิน


266

ความแตกต่างระหว่าง<pluginManagement/>และ<plugins/>คือ<plugin/>ภายใต้:

  • <pluginManagement/>กำหนดการตั้งค่าสำหรับปลั๊กอินที่จะสืบทอดโดยโมดูลในบิลด์ของคุณ เหมาะอย่างยิ่งสำหรับกรณีที่คุณมีไฟล์ pom พาเรนต์

  • <plugins/>เป็นการเรียกใช้ปลั๊กอินที่แท้จริง <pluginManagement/>มันอาจจะหรืออาจไม่ได้รับการสืบทอดมาจาก

คุณไม่จำเป็นต้องมี<pluginManagement/>ในโครงการของคุณหากไม่ใช่ POM หลัก อย่างไรก็ตามหากเป็นปอมของพ่อแม่แล้วในปอมของเด็กคุณต้องมีการประกาศเช่น:

<plugins>
    <plugin>
        <groupId>com.foo</groupId>
        <artifactId>bar-plugin</artifactId>
    </plugin>
</plugins>

สังเกตว่าคุณไม่ได้กำหนดค่าใด ๆ คุณสามารถสืบทอดจากผู้ปกครองเว้นแต่คุณจะต้องปรับเปลี่ยนการเรียกร้องของคุณเพิ่มเติมตามความต้องการของโครงการลูก

สำหรับข้อมูลเฉพาะเพิ่มเติมคุณสามารถตรวจสอบ:


ขอบคุณสำหรับการตอบกลับของคุณ. ฉันต้องผสม pluginManagement และแท็ก plugin (สำหรับ maven-dependency-plugin) ในไฟล์ pom เดียวกันเพราะฉันต้องข้ามบั๊กของปลั๊กอิน M2E Eclipse IDE ดูstackoverflow.com/questions/8706017/…
Andrea Borgogelli Avveduti

7
ขอบคุณ! :) นี้เป็นเหมือนกันสำหรับและ<dependency/> <dependencyManagement/>คุณกำหนดอ้างอิง (พร้อมกับรุ่นของพวกเขาและขอบเขตถ้าคุณต้องการ) ใน<dependencyManagement/>ส่วนนั้นใน<dependencies/>ส่วนของคุณเพียงแค่กำหนดและgroupId artifactId
carlspring

1
หากฉันต้องเรียกใช้งานปลั๊กอินสองครั้งฉันควรใช้การจัดการปลั๊กอินหรือไม่
Kalpesh Soni

@KalpeshSoni: ขึ้นอยู่กับ - คุณอาจต้องการกำหนดค่าทั่วไประหว่างการประหารสองครั้งซึ่งคุณไม่ต้องการกำหนดใหม่
carlspring

39

คุณใช้pluginManagementในparent pomเพื่อกำหนดค่าในกรณีที่child pomต้องการใช้ แต่ไม่ใช่ทุกปลั๊กอินลูกที่ต้องการใช้ ตัวอย่างอาจเป็นได้ว่าคุณsuper pomกำหนดตัวเลือกบางอย่างสำหรับปลั๊กอิน Javadoc maven

ไม่ใช่แต่ละคนchild pomอาจต้องการใช้ Javadoc ดังนั้นคุณจึงกำหนดค่าเริ่มต้นเหล่านั้นในpluginManagementส่วน ปอมเด็กที่ต้องการที่จะใช้ปลั๊กอิน Javadoc เพียงกำหนดส่วนปลั๊กอินและจะสืบทอดการกำหนดค่าจากความหมายในpluginManagementparent pom


ขอบคุณ. ฉันแค่มองหาการผสมผสาน pluginManagement และแท็กปลั๊กอินในไฟล์ pom เดียวกันเพราะฉันต้องข้ามบั๊กเล็กน้อยของปลั๊กอิน M2E สำหรับ Eclipse ดูstackoverflow.com/questions/8706017/…
Andrea Borgogelli Avveduti

3

pluginManagement: เป็นองค์ประกอบที่เห็นด้านข้างปลั๊กอิน การจัดการปลั๊กอินมีองค์ประกอบปลั๊กอินในลักษณะเดียวกันยกเว้นว่าแทนที่จะกำหนดค่าข้อมูลปลั๊กอินสำหรับบิลด์โปรเจ็กต์นี้โดยเฉพาะมันมีวัตถุประสงค์เพื่อกำหนดคอนฟิกบิวด์โปรเจ็กต์ที่สืบทอดจากอันนี้ อย่างไรก็ตามนี่เป็นเพียงการกำหนดค่าปลั๊กอินที่อ้างอิงจริงภายในองค์ประกอบปลั๊กอินในชายน์ เด็ก ๆ มีสิทธิ์ที่จะแทนที่คำจำกัดความการจัดการปลั๊กอิน

จากhttp://maven.apache.org/pom.html#Plugin%5FManagement

คัดลอกมาจาก:

Maven2 - ปัญหาเกี่ยวกับการจัดการปลั๊กอินและความสัมพันธ์แม่ลูก

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