Apa itu pluginManagement di pom.xml Maven?

266

Ini adalah potongan dari file pom saya.

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

Saya berhasil menggunakannya dengan perintah

mvn install

Tetapi, ketika saya mencoba untuk melampirkannya ke tag "pluginManagement", maven-dependency-pluginberhenti bekerja ketika saya meluncurkan installtujuan. Mengapa tag "pluginManagement" mengubah perilaku build? Atau haruskah saya menggunakan tujuan atau opsi lain?

Andrea Borgogelli Avveduti
sumber

Jawaban:

299

Anda masih perlu menambahkan

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

di build Anda, karena pluginManagementhanya cara untuk berbagi konfigurasi plugin yang sama di semua modul proyek Anda.

Dari dokumentasi Maven:

pluginManagement : adalah elemen yang terlihat di sepanjang plugins samping. Manajemen Plugin berisi elemen-elemen plugin dengan cara yang hampir sama, kecuali bahwa alih-alih mengonfigurasi informasi plugin untuk build proyek khusus ini, ia dimaksudkan untuk mengonfigurasi build proyek yang mewarisi dari yang ini. Namun, ini hanya mengonfigurasi plugin yang sebenarnya direferensikan dalam elemen plugins pada anak-anak. Anak-anak berhak untuk menimpa definisi PluginManagement.

jordeu
sumber
266

Perbedaan antara <pluginManagement/>dan <plugins/>adalah bahwa di <plugin/>bawah:

  • <pluginManagement/>mendefinisikan pengaturan untuk plugin yang akan diwarisi oleh modul di build Anda. Ini bagus untuk kasus di mana Anda memiliki file pom induk.

  • <plugins/>adalah permohonan plugin yang sebenarnya. Ini mungkin atau mungkin tidak diwarisi dari a <pluginManagement/>.

Anda tidak perlu memiliki <pluginManagement/>dalam proyek Anda, jika itu bukan POM induk. Namun, jika pom orang tua, maka di pom anak, Anda harus memiliki deklarasi seperti:

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

Perhatikan bagaimana Anda tidak mendefinisikan konfigurasi apa pun. Anda dapat mewarisinya dari orang tua, kecuali jika Anda perlu menyesuaikan permintaan Anda lebih lanjut sesuai kebutuhan proyek anak.

Untuk informasi yang lebih spesifik, Anda dapat memeriksa:

carlspring
sumber
Terimakasih atas balasan anda. Saya perlu mencampur plugin Plugin Management dan tag plugin (untuk maven-dependency-plugin) pada file pom yang sama, karena saya perlu mem-bypass bug kecil dari plugin M2E Eclipse IDE. Lihat stackoverflow.com/questions/8706017/...
Andrea Borgogelli Avveduti
7
Terima kasih! :) Ini sama untuk <dependency/>dan <dependencyManagement/>. Anda mendefinisikan dependensi (bersama dengan versi dan cakupannya, jika Anda suka) di <dependencyManagement/>bagian dan kemudian di <dependencies/>bagian Anda hanya menentukan groupIddan artifactId.
carlspring
1
jika saya harus menjalankan plugin dua kali, haruskah saya menggunakan manajemen plugin?
Kalpesh Soni
@KalpeshSoni: Tergantung - Anda mungkin ingin memiliki konfigurasi umum antara dua eksekusi yang Anda tidak ingin harus mendefinisikan ulang.
carlspring
39

Anda menggunakan pluginManagementdalam parent pomuntuk mengkonfigurasinya jika ada yang child pomingin menggunakannya, tetapi tidak setiap plugin anak ingin menggunakannya. Contohnya adalah Anda super pommenentukan beberapa opsi untuk plugin Javadoc maven.

Tidak setiap orang child pommungkin ingin menggunakan Javadoc, jadi Anda mendefinisikan default-standar itu di pluginManagementbagian. Child pom yang ingin menggunakan plugin Javadoc, hanya mendefinisikan bagian plugin dan akan mewarisi konfigurasi dari pluginManagementdefinisi di parent pom.

Wim Deblauwe
sumber
Terima kasih. Saya hanya ingin mencampur plugin Plugin Management dan tag plugin pada file pom yang sama karena saya perlu mem-bypass sedikit bug pada plugin M2E untuk Eclipse. Lihat stackoverflow.com/questions/8706017/...
Andrea Borgogelli Avveduti
3

pluginManagement: adalah elemen yang terlihat di sepanjang plugins samping. Manajemen Plugin berisi elemen-elemen plugin dengan cara yang hampir sama, kecuali bahwa alih-alih mengonfigurasi informasi plugin untuk build proyek khusus ini, ia dimaksudkan untuk mengonfigurasi build proyek yang mewarisi dari yang ini. Namun, ini hanya mengonfigurasi plugin yang sebenarnya direferensikan dalam elemen plugins pada anak-anak. Anak-anak berhak untuk menimpa definisi PluginManagement.

Dari http://maven.apache.org/pom.html#Plugin%5Management

Disalin dari:

Maven2 - masalah dengan pluginManagement dan hubungan orangtua-anak

semut
sumber