Baik plugin dan dependensi adalah file Jar.
Namun perbedaan di antara keduanya adalah, sebagian besar pekerjaan di maven dilakukan dengan menggunakan plugin; sedangkan ketergantungan hanyalah sebuah file Jar yang akan ditambahkan ke classpath saat menjalankan tugas.
Misalnya, Anda menggunakan compiler-plugin untuk mengompilasi file java. Anda tidak dapat menggunakan compiler-plugin sebagai dependensi karena itu hanya akan menambahkan plugin ke classpath, dan tidak akan memicu kompilasi apa pun. File Jar yang akan ditambahkan ke classpath saat mengompilasi file, akan ditentukan sebagai dependensi.
Sama halnya dengan skenario Anda. Anda harus menggunakan spring-plugin untuk menjalankan beberapa spring executable [Saya tidak yakin untuk apa spring-plugins digunakan. Saya hanya menebak-nebak di sini]. Tetapi Anda membutuhkan dependensi untuk menjalankan executable tersebut. Dan Junit diberi tag di bawah ketergantungan karena digunakan oleh plugin yang pasti untuk menjalankan pengujian unit.
Jadi, bisa dikatakan, plugin adalah file Jar yang menjalankan tugas, dan dependensi adalah Jar yang menyediakan file kelas untuk menjalankan tugas.
Semoga itu menjawab pertanyaan Anda!
Maven sendiri dapat digambarkan sebagai food processor yang memiliki banyak unit berbeda yang dapat digunakan untuk menyelesaikan berbagai tugas. Unit tersebut disebut plugin. Misalnya, untuk mengompilasi project maven Anda gunakan
maven-compiler-plugin
, untuk menjalankan pengujian -maven-surefire-plugin
dan seterusnya.Ketergantungan dalam istilah maven adalah bagian paket dari kelas yang bergantung pada proyek Anda. Bisa jadi jar, war, dll. Misalnya, jika Anda ingin menulis pengujian JUnit, Anda harus menggunakan anotasi dan class JUnit sehingga Anda harus mendeklarasikan bahwa project Anda bergantung pada JUnit.
sumber
Plugin dan dependensi adalah hal yang sangat berbeda dan saling melengkapi.
Plugin apa itu?
Plugin melakukan tugas untuk build Maven. Ini tidak dikemas dalam aplikasi.
Inilah jantung Maven.
Setiap tugas yang dijalankan oleh Maven dilakukan oleh plugin .
Ada dua kategori plugin: the
build
danreporting
plugins :<build/>
elemen dari POM.<reporting/
> elemen dari POM.Menurut tujuan maven yang ditentukan di baris perintah (misalnya
mvn clean
,mvn clean package
ataumvn site
), gaya hidup tertentu akan digunakan dan serangkaian tujuan plugin tertentu akan dijalankan.Ada tiga built-in membangun siklus hidup:
default
,clean
dansite
. Thedefault
siklus hidup menangani penyebaran proyek Anda,clean
menangani siklus hidup proyek pembersihan, sementarasite
menangani siklus hidup penciptaan proyek Anda dokumentasi situs.Sasaran plugin mungkin terikat pada fase tertentu dari gaya hidup tertentu.
Misalnya
maven-compiler-plugin
mengikat secara defaultcompile
tujuan untuk fase siklus hidup:compile
.Sebagian besar plugin maven (baik plugin inti maupun plugin pihak ketiga) lebih menyukai konvensi daripada konfigurasi. Jadi ini umumnya mengikat tujuan plugin ke fase tertentu untuk membuat penggunaannya lebih sederhana.
Itu lebih rapi dan lebih sedikit rawan kesalahan:
dari:
Dependensi apa itu?
Dependensi adalah artefak / komponen Maven yang diperlukan di classpath selama pembuatan Maven.
Ini mungkin dikemas dalam aplikasi tetapi belum tentu (lihat di
scope
bawah).Sebagian besar dependensi adalah jar tetapi ini mungkin juga jenis arsip lain: war, ear, test-jar, ejb-client ... atau masih POM atau BOM.
Dalam pom.xml sebuah, dependensi dapat ditentukan di beberapa tempat:
<build><dependencies>
sebagian,dependencies management
sebagian atau masih dalam sebuahplugin
deklarasi ! Memang beberapa plugin mungkin perlu memiliki beberapa dependensi di classpath selama eksekusinya. Itu tidak umum tetapi itu mungkin terjadi.Berikut adalah contoh dari dokumentasi yang menunjukkan bahwa
plugin
dandependency
mungkin bekerja sama:Di Maven, dependensi dirujuk dalam format tertentu:
groupId:artifactId:packaging:classifier:version
.Pengklasifikasi (yang opsional) dan pengemasan (
JAR
secara default) tidak secara umum ditentukan. Jadi format umum didependency
deklarasi agak:groupId:artifactId:version
.Berikut adalah contoh dependensi yang dideklarasikan di
<build><dependencies>
bagian:Berlawanan dengan plugin, dependensi memiliki cakupan.
Cakupan default adalah
compile
. Itu adalah cakupan yang paling umum dibutuhkan (konvensi ulang konfigurasi lagi).The
compile
lingkup berarti bahwa ketergantungan tersedia di semua calsspath proyek.Scope menentukan di mana classpaths dependensi harus ditambahkan. Misalnya, apakah kita membutuhkannya saat kompilasi dan runtime, atau hanya untuk pengujian kompilasi dan eksekusi?
Misalnya kami sebelumnya mendefinisikan Hibernate sebagai
compile
dependensi seperti yang kami butuhkan di mana-mana: kompilasi sumber, kompilasi pengujian, runtime, dan sebagainya ....Tetapi kami tidak ingin pustaka pengujian dipaketkan dalam aplikasi atau direferensikan dalam kode sumber . Jadi kami menentukan
test
ruang lingkupnya:sumber
webdriver-ie
saya memiliki dua opsi, baik memasukkannya sebagaiplugins
ataudependency
, saya menyertakan keduanya untuk membandingkan, & mengamati keduanya memilikigroupId
perbedaan yang persis sama , satu-satunya perbedaan adalah bahwa keduanyaplugins
tidak datang dengan versi tertentu tetapidependency
datang dengan0.6.685
. Bisakah Anda menjelaskannya secara awam (dalam kaitannya dengan contoh ini) istilah apa bedanya, mana yang akan digunakan kapan. Ada saran?pom.xml
. Tetapi satu hal yang menarik bagi Anda adalah bahwa menentukan versi dependensi adalah wajib (di pom saat ini atau di pom induk jika itu adalah dependensi yang diwariskan) di versi Maven mana pun sementara sejak Maven 3 (mungkin ide bagus yang buruk sebagai fitur), menentukan versi plugin adalah opsional. Maven akan menggunakan versi terakhir yang tersedia di repositori rilis tempat Maven menemukannya. (1/2)Jika Anda berasal dari latar belakang front-end seperti saya, dan terbiasa dengan Grunt dan npm, pikirkan seperti ini:
Pertama Anda akan lari, katakanlah
npm install grunt-contrib-copy --save-dev
,. Ini seperti milik maven<dependency></dependency>
. Ini mengunduh file yang diperlukan untuk menjalankan tugas build.Kemudian Anda akan mengonfigurasi tugas di Gruntfile.js
Ini seperti milik maven
<plugin>/<plugin>
. Anda memberi tahu alat build apa yang harus dilakukan dengan kode yang diunduh oleh npm /<dependency></dependency>
.Tentu saja ini bukan analogi yang tepat, tetapi cukup dekat untuk membantu membungkus kepala Anda di sekitarnya.
sumber
Plug-in digunakan untuk menambahkan fungsionalitas ke
Maven
dirinya sendiri (seperti menambahkaneclipse
dukungan atauSpringBoot
dukungan keMaven
dll.). Ketergantungan diperlukan oleh kode sumber Anda untuk melewati fase Maven apa pun (compile
atautest
misalnya). Dalam kasusJUnit
sejak kode uji pada dasarnya adalah bagian dari basis kode Anda dan Anda memanggilJUnit
perintah tertentu di dalam test suite dan perintah-perintah tersebut tidak disediakan olehJava SDK
karena ituJUnit
harus hadir pada saat ituMaven
adalah dalam tahap pengujian dan ini ditangani dengan menyebutkanJUnit
sebagai dependensi dipom.xml
file Anda .sumber
Maven pada intinya adalah kerangka kerja eksekusi plugin - sesuai definisi ringkas formal dan standar. Untuk membuatnya lebih jelas, perintah yang Anda gunakan seperti
maven-install/clean/compile/build etc
untuk membuat / mengeksekusi jars, yang terkadang kami jalankan juga secara manual. Jadi, hal-hal yang ingin Anda jalankan (atau konfigurasikan atau jalankan) pada dasarnya Anda taruh di tag dependensi mavens pom dan jawabannya siapa yang akan menjalankan dependensi ini (diperlukan untuk pengaturan lingkungan) adalah pluginnya.sumber
Jawaban satu baris - pemahaman dasar
Plugin adalah alat yang Anda gunakan saat menjalankan build maven Anda
Ketergantungan berarti jenis pustaka apa pun yang akan Anda gunakan dalam kode Anda
sumber
Plugin adalah ekstensi untuk Maven, sesuatu yang digunakan untuk menghasilkan artefak Anda (misalnya maven-jar-plugin, digunakan untuk, Anda dapat menebaknya, membuat jar dari kelas dan resource yang Anda kompilasi).
Dependensi adalah pustaka yang dibutuhkan oleh aplikasi yang Anda buat, pada kompilasi dan / atau pengujian dan / atau waktu runtime.
sumber