Eclipse memiliki konsep incremental builds. Ini sangat berguna karena menghemat banyak waktu.
Bagaimana ini Berguna
Katakanlah Anda baru saja mengubah satu file .java. Pembangun inkremental akan dapat mengkompilasi kode tanpa harus mengkompilasi ulang semuanya (yang akan memakan waktu lebih lama).
Sekarang apa masalahnya dengan Plugin Maven
Sebagian besar plugin maven tidak dirancang untuk build tambahan dan karenanya menimbulkan masalah bagi m2e. m2e tidak tahu apakah tujuan plugin adalah sesuatu yang penting atau tidak relevan. Jika itu hanya mengeksekusi setiap plugin ketika satu file berubah, itu akan memakan banyak waktu.
Inilah alasan mengapa m2e bergantung pada informasi metadata untuk mengetahui bagaimana eksekusi harus ditangani. m2e telah memberikan opsi berbeda untuk memberikan informasi metadata ini dan urutan preferensi adalah seperti di bawah ini (tertinggi ke terendah)
- pom.xml proyek
- orang tua, kakek-nenek dan seterusnya file pom.xml
- Preferensi ruang kerja [m2e 1.2+]
- memasang ekstensi m2e
- [m2e 1.1+] metadata pemetaan siklus hidup yang disediakan oleh plugin maven
- metadata pemetaan siklus hidup default dikirimkan dengan m2e
1,2 mengacu pada bagian pluginManagement yang menentukan di tag file pom Anda atau orang tuanya. M2E membaca konfigurasi ini untuk mengkonfigurasi proyek. Potongan di bawah menginstruksikan m2e untuk mengabaikan jslint
dan compress
tujuan yuicompressor-maven-plugin
<pluginManagement>
<plugins>
<!--This plugin's configuration is used to store Eclipse m2e settings
only. It has no influence on the Maven build itself. -->
<plugin>
<groupId>org.eclipse.m2e</groupId>
<artifactId>lifecycle-mapping</artifactId>
<version>1.0.0</version>
<configuration>
<lifecycleMappingMetadata>
<pluginExecutions>
<pluginExecution>
<pluginExecutionFilter>
<groupId>net.alchim31.maven</groupId>
<artifactId>yuicompressor-maven-plugin</artifactId>
<versionRange>[1.0,)</versionRange>
<goals>
<goal>compress</goal>
<goal>jslint</goal>
</goals>
</pluginExecutionFilter>
<action>
<ignore />
</action>
</pluginExecution>
</pluginExecutions>
</lifecycleMappingMetadata>
</configuration>
</plugin>
</plugins>
</pluginManagement>
3) Jika Anda tidak suka mencemari file pom Anda dengan metadata ini, Anda dapat menyimpannya dalam file XML eksternal (opsi 3). Di bawah ini adalah contoh file pemetaan yang menginstruksikan m2e untuk mengabaikan jslint
dan compress
tujuan yuicompressor-maven-plugin
<?xml version="1.0" encoding="UTF-8"?>
<lifecycleMappingMetadata>
<pluginExecutions>
<pluginExecution>
<pluginExecutionFilter>
<groupId>net.alchim31.maven</groupId>
<artifactId>yuicompressor-maven-plugin</artifactId>
<versionRange>[1.0,)</versionRange>
<goals>
<goal>compress</goal>
<goal>jslint</goal>
</goals>
</pluginExecutionFilter>
<action>
<ignore/>
</action>
</pluginExecution>
</pluginExecutions>
</lifecycleMappingMetadata>
4) Jika Anda tidak menyukai salah satu dari 3 opsi ini, Anda dapat menggunakan konektor m2e (ekstensi) untuk plugin maven. Konektor pada gilirannya akan memberikan metadata ke m2e. Anda dapat melihat contoh informasi metadata dalam konektor di link ini . Anda mungkin telah memperhatikan bahwa metadata mengacu pada konfigurator. Ini berarti m2e akan mendelegasikan tanggung jawab ke kelas java tertentu yang disediakan oleh pembuat ekstensi. Konfigurator dapat mengkonfigurasi proyek (seperti misalnya menambahkan folder sumber tambahan dll) dan memutuskan apakah akan mengeksekusi plugin maven yang sebenarnya selama build tambahan (jika tidak dikelola dengan benar dalam konfigurator, ini dapat menyebabkan pembangunan proyek tanpa akhir)
Lihat link berikut untuk contoh konfigurator ( link1 , link2 ). Jadi jika plugin adalah sesuatu yang dapat dikelola melalui konektor eksternal, maka Anda dapat menginstalnya. m2e menyimpan daftar konektor semacam itu yang dikontribusikan oleh pengembang lain. Ini dikenal sebagai katalog penemuan. m2e akan meminta Anda untuk memasang konektor jika Anda belum memiliki metadata pemetaan siklus hidup untuk eksekusi melalui salah satu opsi (1-6) dan katalog penemuan memiliki beberapa ekstensi yang dapat mengelola eksekusi.
Gambar di bawah ini menunjukkan bagaimana m2e meminta Anda menginstal konektor untuk plugin build-helper-maven.
.
5) m2e mendorong pembuat plugin untuk mendukung incremental build dan menyediakan pemetaan siklus hidup di dalam maven-plugin itu sendiri. Ini berarti bahwa pengguna tidak perlu menggunakan pemetaan atau konektor siklus hidup tambahan. Beberapa penulis plugin telah menerapkan ini
6) Secara default m2e menyimpan metadata pemetaan siklus hidup untuk sebagian besar plugin yang umum digunakan seperti maven-compiler-plugin dan banyak lainnya.
Sekarang kembali ke pertanyaan: Anda mungkin dapat memberikan pemetaan siklus hidup abaikan dalam 1, 2 atau 3 untuk tujuan spesifik yang menimbulkan masalah bagi Anda.