Jenis Kemasan Maven

1. Ikhtisar

Jenis pengemasan merupakan aspek penting dari setiap proyek Maven. Ini menentukan jenis artefak yang dihasilkan proyek. Umumnya, build menghasilkan jar , war , pom , atau executable lainnya.

Maven menawarkan banyak tipe pengemasan default dan juga memberikan fleksibilitas untuk menentukan yang khusus.

Dalam tutorial ini, kita akan mendalami jenis pengemasan Maven. Pertama, kita akan melihat siklus proses build di Maven. Kemudian, kita akan membahas setiap jenis kemasan, apa yang diwakilinya, dan pengaruhnya terhadap siklus hidup proyek. Pada akhirnya, kita akan melihat bagaimana mendefinisikan tipe kemasan khusus.

2. Jenis Kemasan Default

Maven menawarkan banyak jenis pengemasan default yang mencakup jar , war , ear , pom , rar , ejb , dan maven-plugin . Setiap jenis pengemasan mengikuti siklus proses build yang terdiri dari beberapa fase. Biasanya, setiap fase adalah urutan tujuan dan melakukan tugas tertentu.

Jenis kemasan yang berbeda mungkin memiliki tujuan yang berbeda dalam fase tertentu. Misalnya, dalam fase paket jenis pengemasan jar, tujuan jar maven-jar-plugin dijalankan. Sebaliknya, untuk proyek perang , tujuan perang maven-war-plugin dijalankan dalam fase yang sama.

2.1. botol

Arsip Java - atau toples - adalah salah satu jenis pengemasan paling populer. Proyek dengan jenis pengemasan ini menghasilkan file zip terkompresi dengan ekstensi .jar . Ini mungkin termasuk kelas Java murni, antarmuka, sumber daya, dan file metadata.

Untuk memulainya, mari kita lihat beberapa binding tahap goal-to-build-default untuk tabung :

  • sumber daya: sumber daya
  • kompiler: kompilasi
  • resource: testResources
  • compiler: testCompile
  • pasti: tes
  • jar: jar
  • instal: instal
  • menyebarkan: menyebarkan

Tanpa penundaan, mari kita tentukan jenis pengemasan proyek jar :

jar

Jika tidak ada yang ditentukan, Maven menganggap jenis kemasan adalah toples.

2.2. perang

Sederhananya, arsip aplikasi web - atau perang - berisi semua file yang terkait dengan aplikasi web. Ini mungkin termasuk servlet Java, JSP, halaman HTML, deskriptor penerapan, dan sumber daya terkait. Secara keseluruhan, perang memiliki tujuan yang sama seperti toples , tetapi dengan satu pengecualian — fase paket perang memiliki tujuan yang berbeda, yaitu perang .

Tak ayal, guci dan war adalah jenis kemasan yang paling digemari masyarakat Jawa. Perbedaan mendetail antara keduanya mungkin menjadi bacaan yang menarik.

Mari kita tentukan jenis pengemasan aplikasi web:

war

Jenis pengemasan lain ejb , par , dan rar juga memiliki siklus hidup yang serupa, tetapi masing-masing memiliki tujuan paket yang berbeda.

ejb:ejb or par:par or rar:rar

2.3. telinga

Arsip aplikasi perusahaan - atau telinga - adalah file terkompresi yang berisi aplikasi J2EE. Ini terdiri dari satu atau lebih modul yang dapat berupa modul web (dikemas sebagai file perang ) atau modul EJB (dikemas sebagai file jar ) atau keduanya.

Dengan kata lain, telinga adalah superset dari guci dan perang dan membutuhkan server aplikasi untuk menjalankan aplikasi, sedangkan perang hanya membutuhkan wadah web atau server web untuk menyebarkannya. Aspek-aspek yang membedakan server web dari server aplikasi, dan server populer apa yang ada di Java, merupakan konsep penting bagi pengembang Java.

Mari tentukan pengikatan tujuan default untuk telinga :

  • telinga: menghasilkan-aplikasi-xml
  • sumber daya: sumber daya
  • telinga: telinga
  • instal: instal
  • menyebarkan: menyebarkan

Inilah cara kami menentukan jenis pengemasan dari proyek semacam itu:

ear

2.4. pom

Di antara semua jenis kemasan, pom adalah yang paling sederhana. Ini membantu untuk membuat agregator dan proyek induk.

Proyek agregator atau multi-modul merakit submodul yang berasal dari sumber berbeda. Submodul ini adalah proyek Maven biasa dan mengikuti siklus pembuatannya sendiri. POM aggregator memiliki semua referensi submodul di bawah elemen modul .

Proyek induk memungkinkan Anda untuk menentukan hubungan pewarisan antara POM. POM induk berbagi konfigurasi, plugin, dan dependensi tertentu, bersama dengan versinya. Sebagian besar elemen dari induk diwarisi oleh turunannya - pengecualian termasuk artifactId , nama , dan prasyarat .

Karena tidak ada sumber daya untuk diproses dan tidak ada kode untuk dikompilasi atau diuji. Oleh karena itu, artefak proyek pom menghasilkan sendiri alih-alih dapat dieksekusi.

Mari tentukan jenis kemasan proyek multi-modul:

pom

Proyek semacam itu memiliki siklus hidup paling sederhana yang hanya terdiri dari dua langkah: memasang dan menerapkan .

2.5. maven-plugin

Maven menawarkan berbagai plugin yang bermanfaat. Namun, mungkin ada kasus ketika plugin default tidak cukup. Dalam hal ini, alat tersebut memberikan fleksibilitas untuk membuat maven-plugin, sesuai dengan kebutuhan proyek.

Untuk membuat plugin, setel jenis kemasan proyek:

maven-plugin

The maven-plugin memiliki siklus hidup yang sama dengan jar 's siklus hidup, 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 pengemasan lain melalui proyek dan plugin eksternal. Misalnya, nar (arsip asli), swf , dan swc adalah jenis pengemasan untuk proyek yang menghasilkan konten Adobe Flash dan Flex. Untuk proyek semacam itu, kami membutuhkan plugin yang mendefinisikan pengemasan khusus dan repositori yang berisi plugin.

4. Kesimpulan

Dalam artikel ini, kami melihat berbagai jenis kemasan yang tersedia di Maven. Selain itu, kami menjadi terbiasa dengan apa yang diwakili oleh jenis ini dan bagaimana perbedaannya dalam siklus hidupnya. Pada akhirnya, kami juga mempelajari cara menentukan jenis pengemasan khusus dan menyesuaikan siklus proses build default.

Semua contoh kode di Baeldung dibangun menggunakan Maven. Pastikan untuk memeriksa berbagai konfigurasi Maven kami melalui 0n GitHub.