Sasaran dieksekusi dalam fase yang membantu menentukan urutan tujuan yang akan dieksekusi. Pemahaman terbaik tentang hal ini adalah dengan melihat binding siklus hidup Maven default yang menunjukkan sasaran mana yang dijalankan di mana fase secara default. Sasaran fase kompilasi akan selalu dieksekusi sebelum sasaran fase uji yang akan selalu dieksekusi sebelum sasaran fase paket dan seterusnya.
Bagian dari kebingungan diperburuk oleh fakta bahwa ketika Anda menjalankan pakar Anda dapat menentukan tujuan atau fase. Jika Anda menentukan fase maka maven akan menjalankan semua fase hingga fase yang Anda tentukan secara berurutan (mis. Jika Anda menentukan paket, pertama-tama akan dijalankan melalui fase kompilasi dan kemudian fase uji dan akhirnya fase paket) dan untuk setiap fase akan jalankan semua tujuan yang melekat pada fase itu.
Ketika Anda membuat eksekusi plugin di file build Maven Anda dan Anda hanya menentukan tujuan, maka itu akan mengikat tujuan itu ke fase default yang diberikan. Misalnya, tujuan jaxb: xjc mengikat secara default ke fase menghasilkan-sumber daya. Namun, ketika Anda menentukan eksekusi, Anda juga dapat secara eksplisit menentukan fase untuk tujuan itu.
Jika Anda menentukan tujuan ketika Anda menjalankan Maven maka itu akan menjalankan tujuan itu dan hanya tujuan itu. Dengan kata lain, jika Anda menentukan toples: toples jar hanya akan menjalankan toples: toples tujuan untuk mengemas kode Anda ke dalam toples. Jika sebelumnya Anda belum menjalankan tujuan kompilasi atau menyiapkan kode kompilasi Anda dengan cara lain, ini kemungkinan besar akan gagal.
Saya sudah terbiasa mengatakan "Maven melewati semua fase (hingga dan termasuk yang diberikan)" alih-alih "berlari" atau "mengeksekusi" (yang terakhir disebut dalam Pengantar Maven untuk Membangun Siklus Hidup ). Seperti membedakannya dari kode tujuan yang benar-benar dieksekusi. Tapi itu mungkin selera pribadi.
GeroldBroser mengembalikan Monica
Tapi kita juga bisa menjalankan tujuan yang bukan milik fase apa pun, yaitu mvn archetype:generate, dan dalam hal ini pakar hanya mengeksekusi tujuan?
Quazi Irfan
1
@Pace Apakah Anda punya referensi untuk paragraf terakhir? Saya sudah meragukan itu dan mencobanya dengan proyek sederhana di sini: mvn testmenjalankan:, --- maven-resources-plugin:2.6:resources ... --- maven-compiler-plugin:3.1:compile ... --- maven-resources-plugin:2.6:testResources ... --- maven-compiler-plugin:3.1:testCompile ... --- maven-surefire-plugin:2.12.4:testsementara mvn compiler:testCompilehanya berjalan --- maven-compiler-plugin:3.1:testCompile ....
GeroldBroser mengembalikan Monica
4
@Pace mvn clean compiler:testCompilerun --- maven-clean-plugin:2.5:clean ... --- maven-compiler-plugin:3.1:testCompileyang gagal dengan Failed to execute goal org.apache.maven.plugins:maven-compiler-plugin:3.1:testCompile (default-cli) on project mvnphase: Compilation failure ... cannot find symbol ... symbol: variable MvnPhase(di mana MvnPhasekelas yang diuji direferensikan dalam kelas tes). Rupanya fase tidak dipanggil jika suatu tujuan dipanggil secara eksplisit.
GeroldBroser mengembalikan Monica
1
Berdasarkan masukan dari geroldbroser dan @ kekko12 saya telah memperbarui paragraf terakhir untuk menyatakan bahwa, ketika suatu tujuan ditentukan, hanya tujuan itu yang dijalankan, dan tidak semua fase sebelumnya.
Laju
188
Siklus hidup adalah urutan fase bernama .
Fase dieksekusi secara berurutan. Menjalankan fase berarti mengeksekusi semua fase sebelumnya.
Plugin adalah kumpulan tujuan yang juga disebut MOJO ( M aven O ld J ava O bject).
Analogi: Plugin adalah kelas dan tujuan adalah metode di dalam kelas.
Maven berbasis di sekitar konsep sentral dari Build Life Cycles . Di dalam masing-masing Build Life Cycles ada Build Fase , dan di dalam setiap Build Fase ada Build Goals .
Kita dapat menjalankan fase pembangunan atau membangun tujuan. Saat menjalankan fase pembangunan, kami mengeksekusi semua tujuan pembangunan dalam fase pembangunan tersebut. Bangun sasaran ditugaskan ke satu atau beberapa fase pembangunan. Kami juga dapat menjalankan tujuan pembangunan secara langsung.
Misalnya defaultsiklus hidup terdiri dari Fase Bangun berikut :
◾validate - validate the project is correct and all necessary information is available
◾compile - compile the source code of the project
◾test - test the compiled source code using a suitable unit testing framework. These tests should not require the code be packaged or deployed
◾package - take the compiled code and package it in its distributable format, such as a JAR.
◾integration-test - process and deploy the package if necessary into an environment where integration tests can be run
◾verify - run any checks to verify the package is valid and meets quality criteria
◾install - install the package into the local repository, for use as a dependency in other projects locally
◾deploy - done in an integration or release environment, copies the final package to the remote repository for sharing with other developers and projects.
Jadi untuk melewati fase di atas, kita hanya perlu memanggil satu perintah:
mvn <phase> { Ex: mvn install }
Untuk perintah di atas, mulai dari fase pertama, semua fase dieksekusi secara berurutan sampai fase 'install'. mvndapat menjalankan tujuan atau fase (atau bahkan beberapa tujuan atau beberapa fase) sebagai berikut:
mvn clean install plugin:goal
Namun, jika Anda ingin menyesuaikan awalan yang digunakan untuk referensi plugin Anda, Anda dapat menentukan awalan secara langsung melalui parameter konfigurasi pada POM pluginmaven-plugin-plugin Anda .
Sebagian besar fungsi Maven ada di plugin. Plugin menyediakan sekumpulan tujuan yang dapat dieksekusi menggunakan sintaks berikut:
mvn [plugin-name]:[goal-name]
Sebagai contoh, proyek Java dapat dikompilasi dengan tujuan kompilasi plug-plugin dengan menjalankan mvn compiler:compile.
Bangun siklus hidup adalah daftar fase bernama yang dapat digunakan untuk memberi perintah untuk eksekusi tujuan.
Sasaran yang disediakan oleh plugin dapat dikaitkan dengan berbagai fase siklus kehidupan. Misalnya, secara default, sasarancompiler:compile dikaitkan dengan compilefase , sedangkan sasaransurefire:test dikaitkan dengan testfase . Pertimbangkan perintah berikut:
mvn test
Ketika perintah sebelumnya dijalankan, Maven menjalankan semua tujuan yang terkait dengan masing-masing fase hingga dan termasuk testfase. Dalam kasus seperti itu, Maven menjalankan resources:resourcestujuan yang terkait dengan process-resourcesfase, kemudian compiler:compile, dan seterusnya hingga akhirnya menjalankan surefire:testtujuan.
Namun, meskipun fase build bertanggung jawab untuk langkah spesifik dalam siklus hidup build, cara di mana ia melakukan tanggung jawab tersebut dapat bervariasi. Dan ini dilakukan dengan mendeklarasikan tujuan plugin yang terikat pada fase build tersebut.
Sasaran plugin mewakili tugas tertentu (lebih baik daripada fase pembangunan) yang berkontribusi pada pembangunan dan pengelolaan proyek. Itu mungkin terikat ke nol atau lebih fase membangun. Sasaran yang tidak terikat pada fase build apa pun dapat dieksekusi di luar siklus hidup build dengan permintaan langsung. Urutan eksekusi tergantung pada urutan di mana tujuan dan fase pembangunan dilibatkan. Sebagai contoh, perhatikan perintah di bawah ini. The cleandan packageargumen adalah membangun tahap, sedangkan dependency:copy-dependenciesadalah tujuan (dari plugin).
mvn clean dependency:copy-dependencies package
Jika ini akan dieksekusi, cleanfase akan dieksekusi terlebih dahulu (artinya akan menjalankan semua fase sebelumnya dari siklus hidup bersih, ditambah cleanfase itu sendiri), dan kemudian dependency:copy-dependenciestujuannya, sebelum akhirnya melaksanakan packagefase (dan semua fase build sebelumnya dari siklus hidup default).
Selain itu, jika suatu tujuan terikat pada satu atau beberapa fase build, tujuan itu akan dipanggil dalam semua fase itu.
Selain itu, fase build juga dapat memiliki nol atau lebih tujuan yang terikat padanya. Jika fase build tidak memiliki tujuan yang terikat padanya, fase build itu tidak akan dijalankan. Tetapi jika ia memiliki satu atau lebih tujuan yang terikat padanya, ia akan melaksanakan semua tujuan itu.
Binding Siklus Hidup Built-in
Beberapa fase memiliki tujuan terikat padanya secara default. Dan untuk siklus hidup default, binding ini tergantung pada nilai kemasan.
Jika saya memiliki 2 profil, bisakah saya menjalankan semua plugin profil 1 terlebih dahulu, dan kemudian profil 2?
Bee
[plugin-name]dalam contoh mvn [plugin-name]:[goal-name]ini lebih merupakan awalan plugin . mvn clean installtidak bisa hanya " digunakan dalam skenario multi-modul ". Multi-modul adalah topik yang sangat berbeda.
GeroldBroser mengembalikan Monica
Apakah tujuan yang dilampirkan pada fase yang sama mematuhi urutan apa pun?
belut ghEEz
5
Sebagian besar teks ini disalin kata demi kata dari dokumentasi Maven . Ini harus dinyatakan dengan jelas!
Lii
sumber yang luar biasa!
Bobo
45
Jawaban yang dipilih bagus, tetapi saya masih ingin menambahkan sesuatu yang kecil pada topik. Sebuah ilustrasi.
Itu dengan jelas menunjukkan bagaimana berbagai fase mengikat ke berbagai plugin dan tujuan yang diungkapkan oleh plugin tersebut.
Jadi, mari kita periksa kasus menjalankan sesuatu seperti mvn compile:
Ini adalah fase yang menjalankan plugin kompiler dengan tujuan kompilasi
Plugin kompiler mendapat tujuan berbeda. Untuk mvn compileitu dipetakan ke tujuan tertentu, kompilasi tujuan.
Ini sama dengan berlari mvn compiler:compile
Oleh karena itu, fase terdiri dari tujuan plugin .
mengapa mvn testmenunjuk package, dan mvn installmenunjuk deploy?
Abdull
2
Sepertinya kesalahan ilustrasi, terima kasih telah memperhatikan (menemukannya di web).
Johnny
3
Dari mana Anda mendapatkan ilustrasi itu? Apakah Anda memeriksa persyaratan hak cipta dan penggunaan?
Abdull
1
@Abdull image diambil dari sini carminespagnuolo.eu/otheractivities/tutorato/PR-2014-2015/… (dan juga muncul di banyak halaman web lain) menambahkannya ke jawabannya. Terima kasih telah menyampaikan poin ini, tidak menyadari pentingnya hal itu.
Johnny
1
Pointer dari fase ke plugin dalam diagram juga tidak benar, jarplugin benar-benar berjalan dalam packagefase. Dan pom di sandwich antara fase dan plugin agak membingungkan (saya berasumsi itu berarti bahwa di pom Anda dapat mengkonfigurasi plugin mana yang dijalankan di fase mana, di samping bindings default). Namun, prinsip umumnya benar.
Tiga built-in siklus hidup (alias membangun siklus hidup ): default, clean, site. ( Referensi Siklus Hidup )
Tahap
Setiap siklus hidup terdiri dari fase , misalnya untuk defaultsiklus hidup: compile, test, package, install, dll
Plugin
Artefak yang menyediakan satu atau lebih tujuan.
Berdasarkan pada jenis kemasan ( jar,, wardll.) Tujuan plugin terikat ke fase secara default. ( Binding Siklus Hidup Bawaan )
Tujuan
Tugas (aksi) yang dijalankan. Plugin dapat memiliki satu atau lebih tujuan.
Satu atau lebih sasaran perlu ditentukan saat mengonfigurasi plugin dalam POM . Selain itu, jika plugin tidak memiliki fase default yang ditentukan, tujuan yang ditentukan dapat diikat ke fase.
Hanya fase siklus hidup yang benar-benar masuk akal untuk dianggap sebagai "langkah" (dari proses pembangunan). Saya lebih suka menyebutnya 4 entitas / item / hal .
GeroldBroser mengembalikan Monica
Ketika saya melihat dunia Build Phase, saya menganggapnya sebagai fase lain dalam siklus hidup, dan itu membingungkan saya.
Quazi Irfan
26
Saya percaya jawaban yang baik sudah disediakan, tapi saya ingin menambahkan diagram mudah-follow dari berbagai 3 siklus hidup ( build, clean, dan site) dan fase di setiap.
Fase dalam huruf tebal - adalah fase utama yang umum digunakan.
Singkatnya dari tautan, Anda tidak harus mencoba memahami ketiganya sekaligus, pertama-tama Anda harus memahami hubungan dalam kelompok-kelompok ini:
Siklus Hidup vs Fase
Plugin vs Goal
1. Siklus Hidup vs Fase
Siklus Hidup adalah kumpulan fase secara berurutan, lihat di sini Referensi Siklus Hidup . Ketika Anda memanggil suatu fase , itu juga akan memanggil semua fase sebelum itu.
Misalnya, siklus hidup bersih memiliki 3 fase ( pra-bersih, bersih, pasca-bersih ).
mvn clean
Ini akan memanggil pra-bersih dan bersih .
2. Plugin vs Goal
Sasaran seperti tindakan di Plugin . Jadi jika plugin adalah kelas, sasaran adalah metode.
Anda dapat memanggil sasaran seperti ini:
mvn clean:clean
Ini berarti "panggil tujuan bersih, di plugin bersih" (Tidak ada yang terkait dengan fase bersih di sini. Jangan biarkan kata "bersih" membingungkan Anda, mereka tidak sama!)
3. Sekarang hubungan antara Fase & Sasaran:
Fase dapat (pra) menautkan ke Sasaran . Misalnya, biasanya, fasa bersih terhubung ke sasaran bersih. Jadi, ketika Anda memanggil perintah ini:
mvn clean
Ini akan memanggil fase pra-bersih dan fase bersih yang menghubungkan ke tujuan clean: clean.
Itu tidak harus "dikaitkan dengan 2 atau 3 tujuan" tentu. Bisa jadi tidak ada , satu atau lebih dari tiga , juga.
GeroldBroser mengembalikan Monica
1
Ada tiga siklus hidup bawaan berikut ini:
standar
bersih
situs
Siklus hidup default -> [memvalidasi, menginisialisasi, menghasilkan-sumber, sumber proses, sumber daya proses, sumber daya proses, kompilasi, kelas proses, sumber uji sumber, sumber uji proses, sumber daya uji coba, proses -test-sumber daya, uji-kompilasi, kelas-proses-tes, tes, persiapan-paket, paket, pra-integrasi-tes, integrasi-tes, post-integrasi-tes, verifikasi, instal, sebarkan]
Siklus hidup bersih -> [pra-bersih, bersih, pasca-bersih]
Situs siklus hidup -> [pra-situs, situs, pasca-situs, penyebaran situs]
Alurnya berurutan, misalnya, untuk siklus hidup default , ini dimulai dengan memvalidasi , kemudian menginisialisasi dan seterusnya ...
Anda dapat memeriksa siklus hidup dengan mengaktifkan mode debug mvnyaitu,mvn -X <your_goal>
Jawaban:
Sasaran dieksekusi dalam fase yang membantu menentukan urutan tujuan yang akan dieksekusi. Pemahaman terbaik tentang hal ini adalah dengan melihat binding siklus hidup Maven default yang menunjukkan sasaran mana yang dijalankan di mana fase secara default. Sasaran fase kompilasi akan selalu dieksekusi sebelum sasaran fase uji yang akan selalu dieksekusi sebelum sasaran fase paket dan seterusnya.
Bagian dari kebingungan diperburuk oleh fakta bahwa ketika Anda menjalankan pakar Anda dapat menentukan tujuan atau fase. Jika Anda menentukan fase maka maven akan menjalankan semua fase hingga fase yang Anda tentukan secara berurutan (mis. Jika Anda menentukan paket, pertama-tama akan dijalankan melalui fase kompilasi dan kemudian fase uji dan akhirnya fase paket) dan untuk setiap fase akan jalankan semua tujuan yang melekat pada fase itu.
Ketika Anda membuat eksekusi plugin di file build Maven Anda dan Anda hanya menentukan tujuan, maka itu akan mengikat tujuan itu ke fase default yang diberikan. Misalnya, tujuan jaxb: xjc mengikat secara default ke fase menghasilkan-sumber daya. Namun, ketika Anda menentukan eksekusi, Anda juga dapat secara eksplisit menentukan fase untuk tujuan itu.
Jika Anda menentukan tujuan ketika Anda menjalankan Maven maka itu akan menjalankan tujuan itu dan hanya tujuan itu. Dengan kata lain, jika Anda menentukan toples: toples jar hanya akan menjalankan toples: toples tujuan untuk mengemas kode Anda ke dalam toples. Jika sebelumnya Anda belum menjalankan tujuan kompilasi atau menyiapkan kode kompilasi Anda dengan cara lain, ini kemungkinan besar akan gagal.
sumber
mvn archetype:generate
, dan dalam hal ini pakar hanya mengeksekusi tujuan?mvn test
menjalankan:,--- maven-resources-plugin:2.6:resources ... --- maven-compiler-plugin:3.1:compile ... --- maven-resources-plugin:2.6:testResources ... --- maven-compiler-plugin:3.1:testCompile ... --- maven-surefire-plugin:2.12.4:test
sementaramvn compiler:testCompile
hanya berjalan--- maven-compiler-plugin:3.1:testCompile ...
.mvn clean compiler:testCompile
run--- maven-clean-plugin:2.5:clean ... --- maven-compiler-plugin:3.1:testCompile
yang gagal denganFailed to execute goal org.apache.maven.plugins:maven-compiler-plugin:3.1:testCompile (default-cli) on project mvnphase: Compilation failure ... cannot find symbol ... symbol: variable MvnPhase
(di manaMvnPhase
kelas yang diuji direferensikan dalam kelas tes). Rupanya fase tidak dipanggil jika suatu tujuan dipanggil secara eksplisit.Maven berbasis di sekitar konsep sentral dari Build Life Cycles . Di dalam masing-masing Build Life Cycles ada Build Fase , dan di dalam setiap Build Fase ada Build Goals .
Kita dapat menjalankan fase pembangunan atau membangun tujuan. Saat menjalankan fase pembangunan, kami mengeksekusi semua tujuan pembangunan dalam fase pembangunan tersebut. Bangun sasaran ditugaskan ke satu atau beberapa fase pembangunan. Kami juga dapat menjalankan tujuan pembangunan secara langsung.
Ada tiga Siklus Hidup Build bawaan utama :
Setiap Bangun Siklus Hidup terdiri dari Fase
Misalnya
default
siklus hidup terdiri dari Fase Bangun berikut :Jadi untuk melewati fase di atas, kita hanya perlu memanggil satu perintah:
Untuk perintah di atas, mulai dari fase pertama, semua fase dieksekusi secara berurutan sampai fase 'install'.
mvn
dapat menjalankan tujuan atau fase (atau bahkan beberapa tujuan atau beberapa fase) sebagai berikut:Namun, jika Anda ingin menyesuaikan awalan yang digunakan untuk referensi plugin Anda, Anda dapat menentukan awalan secara langsung melalui parameter konfigurasi pada POM plugin
maven-plugin-plugin
Anda .Fase Pembuatan terdiri dari Sasaran Plugin
Sebagian besar fungsi Maven ada di plugin. Plugin menyediakan sekumpulan tujuan yang dapat dieksekusi menggunakan sintaks berikut:
Sebagai contoh, proyek Java dapat dikompilasi dengan tujuan kompilasi plug-plugin dengan menjalankan
mvn compiler:compile
.Bangun siklus hidup adalah daftar fase bernama yang dapat digunakan untuk memberi perintah untuk eksekusi tujuan.
Sasaran yang disediakan oleh plugin dapat dikaitkan dengan berbagai fase siklus kehidupan. Misalnya, secara default, sasaran
compiler:compile
dikaitkan dengancompile
fase , sedangkan sasaransurefire:test
dikaitkan dengantest
fase . Pertimbangkan perintah berikut:Ketika perintah sebelumnya dijalankan, Maven menjalankan semua tujuan yang terkait dengan masing-masing fase hingga dan termasuk
test
fase. Dalam kasus seperti itu, Maven menjalankanresources:resources
tujuan yang terkait denganprocess-resources
fase, kemudiancompiler:compile
, dan seterusnya hingga akhirnya menjalankansurefire:test
tujuan.Namun, meskipun fase build bertanggung jawab untuk langkah spesifik dalam siklus hidup build, cara di mana ia melakukan tanggung jawab tersebut dapat bervariasi. Dan ini dilakukan dengan mendeklarasikan tujuan plugin yang terikat pada fase build tersebut.
Sasaran plugin mewakili tugas tertentu (lebih baik daripada fase pembangunan) yang berkontribusi pada pembangunan dan pengelolaan proyek. Itu mungkin terikat ke nol atau lebih fase membangun. Sasaran yang tidak terikat pada fase build apa pun dapat dieksekusi di luar siklus hidup build dengan permintaan langsung. Urutan eksekusi tergantung pada urutan di mana tujuan dan fase pembangunan dilibatkan. Sebagai contoh, perhatikan perintah di bawah ini. The
clean
danpackage
argumen adalah membangun tahap, sedangkandependency:copy-dependencies
adalah tujuan (dari plugin).Jika ini akan dieksekusi,
clean
fase akan dieksekusi terlebih dahulu (artinya akan menjalankan semua fase sebelumnya dari siklus hidup bersih, ditambahclean
fase itu sendiri), dan kemudiandependency:copy-dependencies
tujuannya, sebelum akhirnya melaksanakanpackage
fase (dan semua fase build sebelumnya dari siklus hidup default).Selain itu, jika suatu tujuan terikat pada satu atau beberapa fase build, tujuan itu akan dipanggil dalam semua fase itu.
Selain itu, fase build juga dapat memiliki nol atau lebih tujuan yang terikat padanya. Jika fase build tidak memiliki tujuan yang terikat padanya, fase build itu tidak akan dijalankan. Tetapi jika ia memiliki satu atau lebih tujuan yang terikat padanya, ia akan melaksanakan semua tujuan itu.
Binding Siklus Hidup Built-in
Beberapa fase memiliki tujuan terikat padanya secara default. Dan untuk siklus hidup default, binding ini tergantung pada nilai kemasan.
Arsitektur Maven:
Referensi 1
Referensi 2
Sampel Eclipse untuk Pemetaan Siklus Hidup Maven
sumber
[plugin-name]
dalam contohmvn [plugin-name]:[goal-name]
ini lebih merupakan awalan plugin .mvn clean install
tidak bisa hanya " digunakan dalam skenario multi-modul ". Multi-modul adalah topik yang sangat berbeda.Jawaban yang dipilih bagus, tetapi saya masih ingin menambahkan sesuatu yang kecil pada topik. Sebuah ilustrasi.
Itu dengan jelas menunjukkan bagaimana berbagai fase mengikat ke berbagai plugin dan tujuan yang diungkapkan oleh plugin tersebut.
Jadi, mari kita periksa kasus menjalankan sesuatu seperti
mvn compile
:mvn compile
itu dipetakan ke tujuan tertentu, kompilasi tujuan.mvn compiler:compile
Oleh karena itu, fase terdiri dari tujuan plugin .
Tautan ke referensi
sumber
mvn test
menunjukpackage
, danmvn install
menunjukdeploy
?jar
plugin benar-benar berjalan dalampackage
fase. Dan pom di sandwich antara fase dan plugin agak membingungkan (saya berasumsi itu berarti bahwa di pom Anda dapat mengkonfigurasi plugin mana yang dijalankan di fase mana, di samping bindings default). Namun, prinsip umumnya benar.Definisi ini dirinci di halaman situs Maven Pengantar Siklus Hidup Bangun , tetapi saya telah mencoba meringkas :
Maven mendefinisikan 4 item proses pembuatan:
Lingkaran kehidupan
Tiga built-in siklus hidup (alias membangun siklus hidup ):
default
,clean
,site
. ( Referensi Siklus Hidup )Tahap
Setiap siklus hidup terdiri dari fase , misalnya untuk
default
siklus hidup:compile
,test
,package
,install
, dllPlugin
Artefak yang menyediakan satu atau lebih tujuan.
Berdasarkan pada jenis kemasan (
jar
,,war
dll.) Tujuan plugin terikat ke fase secara default. ( Binding Siklus Hidup Bawaan )Tujuan
Tugas (aksi) yang dijalankan. Plugin dapat memiliki satu atau lebih tujuan.
Satu atau lebih sasaran perlu ditentukan saat mengonfigurasi plugin dalam POM . Selain itu, jika plugin tidak memiliki fase default yang ditentukan, tujuan yang ditentukan dapat diikat ke fase.
Maven dapat dipanggil dengan:
clean
,package
)<plugin-prefix>:<goal>
(mis.dependency:copy-dependencies
)<plugin-group-id>:<plugin-artifact-id>[:<plugin-version>]:<goal>
(mis.org.apache.maven.plugins:maven-compiler-plugin:3.7.0:compile
)dengan satu atau lebih kombinasi dari setiap atau semua, misalnya:
sumber
Build Phase
, saya menganggapnya sebagai fase lain dalam siklus hidup, dan itu membingungkan saya.Saya percaya jawaban yang baik sudah disediakan, tapi saya ingin menambahkan diagram mudah-follow dari berbagai 3 siklus hidup (
build
,clean
, dansite
) dan fase di setiap.Fase dalam huruf tebal - adalah fase utama yang umum digunakan.
sumber
generate-resources
muncul dua kali dangenerate-sources
tidak ada.Penghargaan untuk Sandeep Jindal dan Premraj. Penjelasan mereka membantu saya untuk mengerti setelah bingung tentang hal ini untuk sementara waktu.
Saya membuat beberapa contoh kode lengkap & beberapa penjelasan sederhana di sini https://www.surasint.com/maven-life-cycle-phase-and-goal-easy-explained/ . Saya pikir itu dapat membantu orang lain untuk mengerti.
Singkatnya dari tautan, Anda tidak harus mencoba memahami ketiganya sekaligus, pertama-tama Anda harus memahami hubungan dalam kelompok-kelompok ini:
1. Siklus Hidup vs Fase
Siklus Hidup adalah kumpulan fase secara berurutan, lihat di sini Referensi Siklus Hidup . Ketika Anda memanggil suatu fase , itu juga akan memanggil semua fase sebelum itu.
Misalnya, siklus hidup bersih memiliki 3 fase ( pra-bersih, bersih, pasca-bersih ).
Ini akan memanggil pra-bersih dan bersih .
2. Plugin vs Goal
Sasaran seperti tindakan di Plugin . Jadi jika plugin adalah kelas, sasaran adalah metode.
Anda dapat memanggil sasaran seperti ini:
Ini berarti "panggil tujuan bersih, di plugin bersih" (Tidak ada yang terkait dengan fase bersih di sini. Jangan biarkan kata "bersih" membingungkan Anda, mereka tidak sama!)
3. Sekarang hubungan antara Fase & Sasaran:
Fase dapat (pra) menautkan ke Sasaran . Misalnya, biasanya, fasa bersih terhubung ke sasaran bersih. Jadi, ketika Anda memanggil perintah ini:
Ini akan memanggil fase pra-bersih dan fase bersih yang menghubungkan ke tujuan clean: clean.
Ini hampir sama dengan:
Lebih detail dan contoh lengkap ada di https://www.surasint.com/maven-life-cycle-phase-and-goal-easy-explained/
sumber
Terminologi kerja Maven memiliki fase dan tujuan.
Fase: Fase Maven adalah serangkaian tindakan yang dikaitkan dengan 2 atau 3 tujuan
exmaple: - jika Anda menjalankan mvn clean
ini adalah fase yang akan menjalankan tujuan mvn clean: clean
Gol: Gol Maven dibatasi dengan fase
untuk referensi http://books.sonatype.com/mvnref-book/reference/lifecycle-sect-structure.html
sumber
Ada tiga siklus hidup bawaan berikut ini:
Siklus hidup default -> [memvalidasi, menginisialisasi, menghasilkan-sumber, sumber proses, sumber daya proses, sumber daya proses, kompilasi, kelas proses, sumber uji sumber, sumber uji proses, sumber daya uji coba, proses -test-sumber daya, uji-kompilasi, kelas-proses-tes, tes, persiapan-paket, paket, pra-integrasi-tes, integrasi-tes, post-integrasi-tes, verifikasi, instal, sebarkan]
Siklus hidup bersih -> [pra-bersih, bersih, pasca-bersih]
Situs siklus hidup -> [pra-situs, situs, pasca-situs, penyebaran situs]
Alurnya berurutan, misalnya, untuk siklus hidup default , ini dimulai dengan memvalidasi , kemudian menginisialisasi dan seterusnya ...
Anda dapat memeriksa siklus hidup dengan mengaktifkan mode debug
mvn
yaitu,mvn -X <your_goal>
sumber