Apa kemasan "pom" dalam maven?

175

Saya diberi proyek maven untuk mengkompilasi dan ditempatkan di server kucing jantan. Saya belum pernah menggunakan pakar sebelum hari ini, tetapi saya sudah sedikit googling. Sepertinya pom.xmlfile tingkat atas dalam proyek ini memiliki jenis kemasan yang ditetapkan sebagai pom.

Apa yang harus saya lakukan setelah mvn installmendapatkan aplikasi ini digunakan? Saya berharap dapat menemukan warfile di suatu tempat atau sesuatu, tapi saya kira saya mencari di tempat yang salah atau melewatkan langkah.

Derek
sumber
3
mvn install - ini digunakan untuk menginstal artefak Anda (toples, perang, telinga) di repositori lokal Anda (biasanya itu akan ~ / .m2 / direcotry repositori)
asukasz Siwiński

Jawaban:

148

pompada dasarnya adalah wadah submodul, setiap submodul diwakili oleh subdirektori dalam direktori yang sama pom.xmldengan pomkemasan.

Di suatu tempat, bersarang di dalam struktur proyek Anda akan menemukan artefak (modul) dengan warkemasan. Maven umumnya membuat semuanya menjadi /targetsubdirektori dari setiap modul. Jadi setelah mvn installmelihat ke targetsubdirektori dalam modul dengan warkemasan.

Tentu saja:

$ find . -iname "*.war"

berfungsi sama baiknya ;-).

Tomasz Nurkiewicz
sumber
45

kemasan pom hanyalah spesifikasi yang menyatakan artefak utama bukan perang atau botol, tetapi pom.xml itu sendiri.

Seringkali ini digunakan bersama dengan "modul" yang biasanya terkandung dalam sub-direktori proyek yang bersangkutan; Namun, itu juga dapat digunakan dalam skenario tertentu di mana tidak ada biner primer dimaksudkan untuk dibangun, semua artefak penting lainnya telah dinyatakan sebagai artefak sekunder

Pikirkan proyek "dokumentasi", artefak utama mungkin berupa PDF, tetapi sudah dibangun, dan pekerjaan untuk menyatakannya sebagai artefak sekunder mungkin diinginkan daripada konfigurasi untuk memberi tahu pakar bagaimana cara membangun PDF yang tidak perlu dikompilasi.

Edwin Buck
sumber
Contoh lain yang dapat saya pikirkan dalam baris yang sama dengan proyek pom ==> kelas abstrak dan modul di dalamnya ==> kelas beton.
bharatj
22

Pengemasan pomdigunakan dalam proyek-proyek yang menggabungkan proyek-proyek lain, dan dalam proyek-proyek yang hanya bermanfaat keluarannya merupakan artifak terlampir dari beberapa plugin. Dalam kasus Anda, saya rasa pom tingkat atas Anda mencakup <modules>...</modules>untuk mengumpulkan direktori lain, dan output aktual adalah hasil dari salah satu dari direktori lain (mungkin sub). Ini akan, jika dikodekan dengan bijaksana untuk tujuan ini, memiliki kemasan war.

bmargulies
sumber
1
Apa yang Anda maksud dengan "satu-satunya hasil yang bermanfaat adalah artefak terlampir dari beberapa plugin"?
omjego
9

Untuk hanya menjawab pertanyaan Anda ketika Anda melakukan mvn: instal , maven akan membuat artefak paket berdasarkan ( atribut kemasan di pom.xml), Setelah Anda menjalankan instalasi maven Anda, Anda dapat menemukan file dengan ekstensi .package

  • Dalam direktori target ruang kerja proyek
  • Juga di mana repositori lokal maven 2 Anda mencari ( .m2 / respository ) di komputer Anda, artifak Anda tercantum dalam repositori .m2 di bawah direktori ( groupId / artifactId / artifactId / artifactId-version.packaging )
  • Jika Anda melihat di bawah direktori Anda akan menemukan file ekstensi yang dikemas dan juga ekstensi pom (ekstensi pom pada dasarnya adalah pom.xml yang digunakan untuk menghasilkan paket ini)
  • Jika proyek pakar Anda adalah multi-modul, setiap modul akan dua file seperti yang dijelaskan di atas kecuali untuk proyek tingkat atas yang hanya akan memiliki pom
Prasanna Talakanti
sumber
8

Mengemas artefak sebagai POM berarti memiliki siklus hidup yang sangat sederhana

package -> install -> deploy

http://maven.apache.org/guides/introduction/introduction-to-the-lifecycle.html

Ini berguna jika Anda menggunakan file pom.xml atau proyek yang tidak sesuai dengan jenis kemasan lainnya.

Kami menggunakan kemasan pom untuk banyak proyek kami dan mengikat fase dan tujuan tambahan yang sesuai.

Sebagai contoh, beberapa aplikasi kami menggunakan:

prepare-package -> test -> package -> install -> deploy

Ketika Anda mvn menginstal aplikasi itu harus menambahkannya ke repositori .m2 lokal Anda. Untuk menerbitkan di tempat lain, Anda perlu mengatur informasi manajemen distribusi yang benar. Anda juga mungkin perlu menggunakan plugin helper pembuat maven, jika artefak tidak secara otomatis dilampirkan oleh Maven.

James Morgan
sumber
6

Saya sarankan untuk melihat contoh klasik di: http://maven.apache.org/guides/getting-started/index.html#How_do_I_build_more_than_one_project_at_once

Di sini my-webapp adalah proyek web, yang tergantung pada kode di proyek aplikasi saya. Jadi untuk menggabungkan dua proyek dalam satu, kami memiliki pom.xml tingkat atas yang menyebutkan proyek mana (modul sesuai terminologi pakar) yang akhirnya akan digabungkan. Pom.xml tingkat atas tersebut dapat menggunakan kemasan pom.

my-webapp dapat memiliki kemasan perang dan dapat memiliki ketergantungan pada aplikasi saya. aplikasi saya dapat memiliki kemasan jar.

Vishal
sumber
2

Kasus penggunaan kehidupan nyata

Di sebuah perusahaan besar di Jawa kami memiliki proyek python yang perlu masuk ke repositori artefak Nexus. Python tidak benar-benar memiliki artefak, jadi hanya ingin .tar atau .zip file python dan tekan. Repo tersebut sudah memiliki integrasi pakar, jadi kami menggunakan <packaging>pom</packaging>perancang dengan plugin perakitan pakar untuk mengemas proyek python sebagai .zipdan mengunggahnya.

Langkah-langkahnya diuraikan dalam pos SO ini

Adam Hughes
sumber
1

Kemasan “pom” tidak lain adalah wadah, yang berisi paket / modul lain seperti stoples, perang, dan telinga.

jika Anda melakukan operasi pada paket luar / wadah seperti mvn clean compile install. kemudian paket / modul dalam juga mendapatkan kompilasi instalasi yang bersih.

tidak perlu melakukan operasi terpisah untuk setiap paket / modul.

Abdul Gafoor
sumber
1

https://maven.apache.org/pom.html

Jenis kemasan yang diperlukan untuk proyek induk dan agregasi (multi-modul). Jenis-jenis ini menentukan tujuan yang terikat pada serangkaian tahapan siklus hidup. Misalnya, jika kemasannya adalah toples, maka fase paket akan menjalankan toples: jar gol. Jika kemasannya adalah pom, sasaran yang dieksekusi adalah situs: attach-descriptor

TaylorChen
sumber
0

POM (Project Object Model) tidak lain adalah skrip otomatisasi untuk membangun proyek, kita dapat menulis skrip otomasi dalam XML, file skrip bangunan dinamai secara berbeda dalam alat Otomasi yang berbeda

seperti yang kita sebut build.xml di ANT, pom.xml di MAVEN

MAVEN dapat mengemas guci, perang, telinga, dan POM yang merupakan hal baru bagi kita semua

jika Anda ingin memeriksa APA ITU POM.XML

Venky Vungarala
sumber