Perpustakaan yang dimaksud adalah Kabinet Tokyo .
Saya ingin memiliki perpustakaan asli, perpustakaan JNI, dan semua kelas Java API dalam satu file JAR untuk menghindari sakit kepala redistribusi.
Tampaknya ada upaya untuk melakukan ini di GitHub , tetapi
- Ini tidak termasuk perpustakaan asli yang sebenarnya, hanya perpustakaan JNI.
- Tampaknya ini khusus untuk plugin dependensi asli Leiningen (tidak akan berfungsi sebagai dapat didistribusikan ulang).
Pertanyaannya adalah, dapatkah saya menggabungkan semuanya dalam satu JAR dan mendistribusikannya kembali? Jika ya, bagaimana caranya?
PS: Ya, saya sadari mungkin ada implikasi portabilitasnya.
UnsatisfiedLinkError
as memuat dll mantan secara implisit ingin memuat yang terakhir, tetapi tidak dapat menemukannya karena tersembunyi di toples. Juga memuat dll terakhir pertama tidak membantu.DLL
harus diketahui terlebih dahulu dan lokasinya harus ditambahkan dalamPATH
variabel lingkungan.https://www.adamheinrich.com/blog/2012/12/how-to-load-native-jni-library-from-jar/
adalah artikel bagus, yang memecahkan masalah saya ..
Dalam kasus saya, saya punya kode berikut untuk menginisialisasi perpustakaan:
sumber
Lihat One-JAR . Ini akan membungkus aplikasi Anda dalam satu file jar dengan loader kelas khusus yang antara lain menangani "guci di dalam guci".
Ini menangani pustaka asli (JNI) dengan membongkar mereka ke folder kerja sementara sesuai kebutuhan.
(Penafian: Saya tidak pernah menggunakan One-JAR, belum perlu, baru saja menandai untuk hari hujan.)
sumber
1) Sertakan perpustakaan asli ke JAR Anda sebagai Sumber Daya. E. g. dengan Maven atau Gradle, dan tata letak proyek standar, tempatkan library native
main/resources
direktori.2) Di suatu tempat di penginisialisasi statis kelas Java, terkait dengan pustaka ini, letakkan kode seperti berikut:
sumber
JarClassLoader adalah pemuat kelas untuk memuat kelas, pustaka asli, dan sumber daya dari JAR monster tunggal dan dari JAR di dalam JAR monster.
sumber
Anda mungkin harus membatalkan pustaka asli ke sistem file lokal. Sejauh yang saya tahu sedikit kode yang memuat tampilan asli di sistem file.
Kode ini akan membantu Anda memulai (saya sudah lama tidak melihatnya, dan ini untuk tujuan yang berbeda tetapi harus melakukan trik, dan saya cukup sibuk saat ini, tetapi jika Anda memiliki pertanyaan, tinggalkan komentar dan saya akan menjawab secepat saya bisa).
sumber