Jenis Pembungkusan Maven

1. Gambaran keseluruhan

Jenis pembungkusan adalah aspek penting dalam sebarang projek Maven. Ia menentukan jenis artifak yang dihasilkan oleh projek. Secara amnya, binaan menghasilkan jar , war , pom , atau lain-lain yang dapat dilaksanakan.

Maven menawarkan banyak jenis pembungkusan lalai dan juga memberikan fleksibiliti untuk menentukan yang sesuai.

Dalam tutorial ini, kita akan menyelami jenis pembungkusan Maven. Pertama, kita akan melihat kitaran hidup yang dibina di Maven. Kemudian, kita akan membincangkan setiap jenis pembungkusan, apa yang mereka wakili, dan kesannya pada kitaran hidup projek. Pada akhirnya, kita akan melihat cara menentukan jenis pembungkusan tersuai.

2. Jenis Pembungkusan Lalai

Maven menawarkan banyak jenis pembungkusan lalai yang merangkumi jar , war , ear , pom , rar , ejb , dan maven-plugin . Setiap jenis pembungkusan mengikuti kitaran hidup yang terdiri daripada fasa. Biasanya, setiap fasa adalah urutan tujuan dan melaksanakan tugas tertentu.

Jenis pembungkusan yang berbeza mungkin mempunyai tujuan yang berbeza dalam fasa tertentu. Sebagai contoh, dalam fasa pembungkusan jenis pembungkusan balang , tujuan jar maven-jar-plugin dilaksanakan. Sebaliknya, untuk projek perang , tujuan perang maven-war-plugin dilaksanakan dalam fasa yang sama.

2.1. balang

Arkib Java - atau balang - adalah salah satu jenis pembungkusan yang paling popular. Projek dengan jenis pembungkusan ini menghasilkan fail zip yang dimampatkan dengan sambungan .jar . Ini mungkin termasuk kelas Java murni, antara muka, sumber daya, dan fail metadata.

Sebagai permulaan, mari kita lihat beberapa ikatan fasa matlamat-untuk-membina lalai untuk balang :

  • sumber: sumber
  • penyusun: menyusun
  • sumber: testResources
  • penyusun: testCompile
  • surefire: ujian
  • balang: balang
  • pasang: pasang
  • menyebarkan: menyebarkan

Tanpa berlengah, mari kita tentukan jenis pembungkusan projek balang :

jar

Sekiranya tidak ada yang dinyatakan, Maven menganggap jenis pembungkusan itu adalah balang.

2.2. perang

Ringkasnya, arkib aplikasi web - atau perang - mengandungi semua fail yang berkaitan dengan aplikasi web. Ini mungkin termasuk servlet Java, JSP, halaman HTML, deskriptor penyebaran, dan sumber daya yang berkaitan. Secara keseluruhan, perang mempunyai tujuan yang sama seperti jar , tetapi dengan satu pengecualian - fasa pakej perang mempunyai tujuan yang berbeza, iaitu perang .

Tanpa keraguan, balang dan perang adalah jenis pembungkusan yang paling popular di masyarakat Jawa. Perbezaan terperinci antara kedua-duanya mungkin merupakan bacaan yang menarik.

Mari tentukan jenis pembungkusan aplikasi web:

war

Jenis pembungkusan lain ejb , par , dan rar juga mempunyai jangka hayat yang serupa, tetapi masing-masing mempunyai tujuan pakej yang berbeza.

ejb:ejb or par:par or rar:rar

2.3. telinga

Arkib aplikasi perusahaan - atau telinga - adalah fail yang dimampatkan yang mengandungi aplikasi J2EE. Ini terdiri daripada satu atau lebih modul yang boleh menjadi modul web (dikemas sebagai fail perang ) atau modul EJB (dikemas sebagai fail jar ) atau kedua-duanya.

Untuk meletakkannya secara berbeza, telinga adalah superset tempayan dan perang dan memerlukan pelayan aplikasi untuk menjalankan aplikasi, sedangkan perang hanya memerlukan wadah web atau pelayan web untuk menyebarkannya. Aspek-aspek yang membezakan pelayan web dari pelayan aplikasi, dan pelayan yang popular di Java, adalah konsep penting bagi pembangun Java.

Mari tentukan ikatan tujuan lalai untuk telinga :

  • telinga: menjana-aplikasi-xml
  • sumber: sumber
  • telinga: telinga
  • pasang: pasang
  • menyebarkan: menyebarkan

Inilah cara kami dapat menentukan jenis pembungkusan projek seperti itu:

ear

2.4. pom

Di antara semua jenis pembungkusan, pom adalah yang paling mudah. Ini membantu membuat agregator dan projek induk.

Projek agregator atau multi-modul mengumpulkan submodul yang datang dari pelbagai sumber. Sub-modul ini adalah projek Maven biasa dan mengikuti kitaran hidup mereka sendiri. POM agregator mempunyai semua rujukan submodul di bawah elemen modul .

Projek induk membolehkan anda menentukan hubungan warisan antara POM. POM induk berkongsi konfigurasi, plugin, dan kebergantungan tertentu, bersama dengan versi mereka. Sebilangan besar elemen dari ibu bapa diwarisi oleh anak-anaknya - pengecualian termasuk artifactId , nama , dan prasyarat .

Kerana tidak ada sumber untuk diproses dan tidak ada kod untuk menyusun atau menguji. Oleh itu, artifak projek pom menghasilkan sendiri dan bukannya boleh dilaksanakan.

Mari tentukan jenis pembungkusan projek berbilang modul:

pom

Projek sedemikian mempunyai kitaran hidup termudah yang hanya terdiri dari dua langkah: memasang dan menggunakan .

2.5. plugin maven

Maven menawarkan pelbagai plugin berguna. Namun, mungkin ada kes apabila pemalam lalai tidak mencukupi. Dalam kes ini, alat ini memberikan kelonggaran untuk membuat plugin maven, sesuai dengan keperluan projek.

Untuk membuat pemalam, tetapkan jenis pembungkusan projek:

maven-plugin

The Maven-plugin mempunyai kitaran hayat yang sama dengan jar 's kitaran hayat, tetapi dengan dua pengecualian:

  • plugin: descriptor is bound to the generate-resources phase
  • plugin: addPluginArtifactMetadata is added to the package phase

For this type of project, a maven-plugin-api dependency is required.

2.6. ejb

Enterprise Java Beans – or ejb – help to create scalable, distributed server-side applications. EJBs often provide the business logic of an application. A typical EJB architecture consists of three components: Enterprise Java Beans (EJBs), the EJB container, and an application server.

Now, let's define the packaging type of the EJB project:

ejb

The ejb packaging type also has a similar lifecycle as jar packaging, but with a different package goal. The package goal for this type of project is ejb:ejb.

The project, with ejb packaging type, requires a maven-ejb-plugin to execute lifecycle goals. Maven provides support for EJB 2 and 3. If no version is specified, then default version 2 is used.

2.7. rar

Resource adapter – or rar – is an archive file that serves as a valid format for the deployment of resource adapters to an application server. Basically, it is a system-level driver that connects a Java application to an enterprise information system (EIS).

Here's the declaration of packaging type for a resource adapter:

rar

Every resource adapter archive consists of two parts: a jar file that contains source code and a ra.xml that serves as a deployment descriptor.

Again, the lifecycle phases are the same as a jar or war packaging with one exception: Thepackage phase executes the rar goal that consists of a maven-rar-plugin to package the archives.

3. Other Packaging Types

So far, we've looked at various packaging types that Maven offers as default. Now, let's imagine we want our project to produce an artifact with a .zip extension. In this case, the default packaging types can't help us.

Maven also provides some more packaging types through plugins. With the help of these plugins, we can define a custom packaging type and its build lifecycle. Some of these types are:

  • msi
  • rpm
  • tar
  • tar.bz2
  • tar.gz
  • tbz
  • zip

To define a custom type, we have to define its packagingtype and phases in its lifecycle. For this, create a components.xml file under the src/main/resources/META-INF/plexus directory:

 org.apache.maven.lifecycle.mapping.LifecycleMapping zip org.apache.maven.lifecycle.mapping.DefaultLifecycleMapping   org.apache.maven.plugins:maven-resources-plugin:resources com.baeldung.maven.plugins:maven-zip-plugin:zip org.apache.maven.plugins:maven-install-plugin:install org.apache.maven.plugins:maven-deploy-plugin:deploy   

Until now, Maven doesn't know anything about our new packaging type and its lifecycle. To make it visible, let's add the plugin in the pom file of the project and set extensions to true:

  com.baeldung.maven.plugins maven-zip-plugin true  

Now, the project will be available for a scan, and the system will look into plugins and compnenets.xml file, too.

Selain semua jenis ini, Maven menawarkan banyak jenis pembungkusan lain melalui projek luaran dan pemalam. Contohnya, nar (arkib asli), swf , dan swc adalah jenis pembungkusan untuk projek yang menghasilkan kandungan Adobe Flash dan Flex. Untuk projek seperti itu, kami memerlukan pemalam yang menentukan pembungkusan tersuai dan repositori yang mengandungi pemalam.

4. Kesimpulan

Dalam artikel ini, kami melihat pelbagai jenis pembungkusan yang terdapat di Maven. Kami juga mengetahui apa yang ditunjukkan oleh jenis ini dan bagaimana perbezaannya dalam kitaran hidup mereka. Pada akhirnya, kami juga belajar bagaimana menentukan jenis kemasan tersuai dan menyesuaikan kitaran hidup lalai.

Semua contoh kod di Baeldung dibina menggunakan Maven. Pastikan untuk melihat pelbagai konfigurasi Maven kami melebihi 0n GitHub.