Saya perhatikan bahwa dalam JAR artifact MAR, atribut project.version termasuk dalam dua file:
META-INF/maven/${groupId}/${artifactId}/pom.properties
META-INF/maven/${groupId}/${artifactId}/pom.xml
Apakah ada cara yang disarankan untuk membaca versi ini saat runtime?
Jawaban:
Anda tidak perlu mengakses file khusus Maven untuk mendapatkan informasi versi perpustakaan / kelas yang diberikan.
Anda cukup menggunakan
getClass().getPackage().getImplementationVersion()
untuk mendapatkan informasi versi yang disimpan dalam file .jar-fileMANIFEST.MF
.Untungnya Maven cukup pintar.Sayangnya Maven tidak menulis informasi yang benar ke manifes juga secara default!Sebagai gantinya kita harus memodifikasi
<archive>
elemen konfigurasi darimaven-jar-plugin
to setaddDefaultImplementationEntries
danaddDefaultSpecificationEntries
totrue
, seperti ini:Idealnya konfigurasi ini harus dimasukkan ke perusahaan
pom
atau base-pom lainnya.Dokumentasi rinci
<archive>
elemen dapat ditemukan dalam dokumentasi Maven Archive .sumber
Untuk menindaklanjuti jawaban di atas, untuk
.war
artefak, saya menemukan saya harus menerapkan konfigurasi yang setaramaven-war-plugin
, daripadamaven-jar-plugin
:Hal ini menambah informasi versi untuk
MANIFEST.MF
di ini proyek.jar
(termasuk dalamWEB-INF/lib
satu.war
)sumber
null
meskipun MANIFEST.MF dalam file perang berisi informasi yang benar.<archiveClasses>true</archiveClasses>
- dan itu berfungsi dengan andal sejak saat itu.Berikut adalah metode untuk mendapatkan versi dari pom.properties, kembali untuk mendapatkannya dari manifes
sumber
Saya menghabiskan beberapa waktu pada dua pendekatan utama di sini dan mereka tidak berhasil untuk saya. Saya menggunakan Netbeans untuk membangun, mungkin ada lebih banyak terjadi di sana. Saya memiliki beberapa kesalahan dan peringatan dari Maven 3 dengan beberapa konstruksi, tapi saya pikir itu mudah diperbaiki. Bukan masalah besar.
Saya memang menemukan jawaban yang terlihat dapat dipertahankan dan mudah diterapkan di artikel ini di DZone:
Saya sudah memiliki sub-folder sumber daya / konfigurasi, dan saya beri nama file saya: app.properties, untuk lebih mencerminkan jenis barang yang kami simpan di sana (seperti URL dukungan, dll.).
Satu-satunya peringatan adalah bahwa Netbeans memberikan peringatan bahwa IDE perlu disaring. Tidak yakin di mana / bagaimana. Tidak ada efek pada saat ini. Mungkin ada pekerjaan untuk itu jika saya perlu menyeberangi jembatan itu. Semoga berhasil.
sumber
Saya menggunakan
maven-assembly-plugin
untuk kemasan pakar saya. Penggunaan Apache Maven Archiver dalam jawaban Joachim Sauer juga bisa berfungsi:Karena archiever adalah salah satu komponen bersama maven , itu dapat digunakan oleh beberapa plugin bangunan pakar, yang juga dapat memiliki konflik jika dua atau lebih plugin diperkenalkan, termasuk
archive
konfigurasi di dalamnya.sumber
Untuk menjalankan ini di Eclipse, serta di Maven build, Anda harus menambahkan entri
addDefaultImplementationEntries
danaddDefaultSpecificationEntries
pom seperti yang dijelaskan dalam balasan lain, lalu gunakan kode berikut:Jika bangunan Java Anda menempatkan kelas target di tempat lain selain "target / kelas", maka Anda mungkin perlu menyesuaikan nilai segmentToRemove.
sumber
System.getProperty("user.dir")/pom.xml
. Saya cukup yakin itu akan untuk hal-hal lain juga kecuali mungkin bukan untuk WTP..getResource()
atau.getResourceAsStream()
.Pada aplikasi booting musim semi saya, solusi dari jawaban yang diterima bekerja sampai saya baru-baru ini memperbarui jdk saya ke versi 12. Mencoba semua jawaban lain juga dan tidak bisa membuatnya bekerja.
Pada saat itu, saya menambahkan baris di bawah ini ke kelas pertama aplikasi booting musim semi saya, tepat setelah anotasi
@SpringBootApplication
Kemudian saya menggunakan di bawah ini untuk mendapatkan nilai dari file properti di kelas mana pun saya ingin menggunakan nilainya dan
appVersion
mendapatkan versi proyek untuk saya:Semoga itu bisa membantu seseorang.
sumber
Solusi sederhana yang kompatibel dengan Maven dan berfungsi untuk semua kelas (dengan demikian juga pihak ketiga):
sumber
Varian Java 8 untuk EJB dalam file perang dengan proyek maven. Diuji pada EAP 7.0.
sumber