Pasang stoples lokal dengan Maven

1. Masalah dan Opsi

Maven adalah alat yang sangat serbaguna dan repositori publik yang tersedia tidak ada duanya. Namun akan selalu ada artefak yang tidak dihosting di mana pun , atau repositori tempat di-host berisiko untuk bergantung, karena mungkin tidak tersedia saat Anda membutuhkannya.

Jika itu terjadi, ada beberapa pilihan:

  • gigit peluru dan instal solusi manajemen repositori lengkap seperti Nexus
  • cobalah untuk mengupload artefak ke salah satu repositori publik yang memiliki reputasi baik
  • instal artefak secara lokal menggunakan plugin maven

Nexus tentu saja merupakan solusi yang lebih matang, tetapi juga lebih kompleks . Menyediakan instance untuk menjalankan Nexus, menyiapkan Nexus itu sendiri, mengonfigurasi, dan memeliharanya mungkin berlebihan untuk masalah sederhana seperti menggunakan satu stoples. Namun, jika skenario ini - menghosting artefak khusus - adalah skenario yang umum, manajer repositori sangat masuk akal.

Mendapatkan artefak yang diunggah ke repositori publik atau di pusat Maven secara langsung juga merupakan solusi yang baik, tetapi biasanya solusi yang panjang. Selain itu, perpustakaan mungkin tidak mengaktifkan Maven sama sekali, yang membuat prosesnya jauh lebih sulit, jadi ini bukan solusi realistis untuk dapat menggunakan artefak SEKARANG.

Itu menyisakan opsi ketiga - menambahkan artefak di kontrol sumber dan menggunakan plugin maven - dalam hal ini, maven-install-plugin untuk menginstalnya secara lokal sebelum proses build membutuhkannya . Sejauh ini, ini adalah opsi termudah dan paling andal yang tersedia.

2. Instal Local Jar Dengan m aven-install-plugin

Mari kita mulai dengan konfigurasi lengkap yang diperlukan untuk menginstal artefak ke dalam repositori lokal kita:

 org.apache.maven.plugins maven-install-plugin 2.5.1  org.somegroup someartifact 1.0 jar ${basedir}/dependencies/someartifact-1.0.jar true    install-jar-lib  install-file  validate   

Sekarang, mari kita uraikan dan analisis detail konfigurasi ini.

2.1. Informasi Artefak

Informasi Artefak didefinisikan sebagai bagian dari elemen. Sintaks sebenarnya sangat mirip dengan mendeklarasikan dependensi - elemen groupId , artifactId , dan versi .

Bagian selanjutnya dari konfigurasi memerlukan penentuan kemasan artefak - ini ditetapkan sebagai jar .

Selanjutnya, kita perlu menyediakan lokasi file jar yang sebenarnya untuk diinstal - ini bisa berupa path file absolut atau bisa juga relatif, menggunakan properti yang tersedia di Maven . Dalam hal ini, properti $ {basedir} mewakili root proyek, yaitu lokasi tempat file pom.xml berada. Ini berarti file someartifact-1.0.jar perlu ditempatkan di direktori / dependencies / di bawah root.

Terakhir, ada beberapa detail opsional lain yang dapat dikonfigurasi juga.

2.2. Eksekusi

Eksekusi tujuan file penginstalan terikat pada fase validasi dari siklus proses build Maven standar. Karena itu, sebelum mencoba mengompilasi - Anda perlu menjalankan fase validasi secara eksplisit:

mvn validate

Setelah langkah ini, kompilasi standar akan berfungsi:

mvn clean install

Setelah fase kompilasi dijalankan, someartifact-1.0.jar kami diinstal dengan benar di repositori lokal kami, sama seperti artefak lain yang mungkin telah diambil dari pusat Maven itu sendiri.

2.3. Menghasilkan POM vs Memasok POM

Pertanyaan apakah kita perlu menyediakan file pom.xml untuk artefak atau tidak bergantung pada dependensi runtime artefak itu sendiri. Sederhananya, jika artefak memiliki dependensi waktu proses pada jar lain, jar ini juga harus ada di classpath pada waktu proses. Dengan artefak sederhana yang seharusnya tidak menjadi masalah, karena kemungkinan besar tidak akan memiliki dependensi saat runtime (daun dalam grafik dependensi).

The generatePom pilihan dalam menginstal file tujuan harus cukup untuk jenis-jenis artefak:

true

Namun, jika artefak lebih kompleks dan memiliki dependensi non-trivial , maka, jika dependensi ini belum ada di classpath, dependensi harus ditambahkan. Salah satu cara untuk melakukannya adalah dengan mendefinisikan dependensi baru ini secara manual di file pom proyek. Solusi yang lebih baik adalah menyediakan file pom.xml kustom bersama dengan artefak yang diinstal:

false ${basedir}/dependencies/someartifact-1.0.pom

Ini akan memungkinkan Maven menyelesaikan semua dependensi artefak yang ditentukan di pom.xml kustom ini , tanpa harus menentukannya secara manual di file pom utama proyek.

3. Kesimpulan

Artikel ini membahas cara menggunakan jar yang tidak dihosting di mana pun dalam proyek Maven dengan menginstalnya secara lokal dengan maven-install-plugin .