Tek .Jar Dosyası Olarak Dağıtım Hazırlamak
Referans jar’lar ve native kütüphaneleri (.so, .dll vs.) oluşturduğunuz .JAR paketine nasıl dahil ediyorsunuz?
Normalde jar referanslar (netbeans,ant,eclipse bunu yapıyor) /lib klasörü altına kopyalanır. Native’ler için hazır gelen bir seçenek yok ama:
<property name="natives.dir" value="lib/native/win32-x86/"/>
<target name="win-native" depends="jar"
<copy todir="${dist.jar.dir}"><fileset dir="${natives.dir}" includes="*.dll"/></copy>
</target>
| jarname.jar
| /LIBS
| | 1.jar
| | 2.jar
| | 3.jar
| 4.dll
| 5.dll
| log4j.properties
Sorun Java Classloader’ın .jar paketleri içerisindeki .jar’lara nasıl ulaşacağını bilmemesi. Classpath’daki referanslar mutlaka .Jar dosyası dışında olmalı (Java sucks-2). Aynı şekilde runtime’da native lib’ler yüklenirken jar paketi içine ulaşamıyoruz(Java sucks-3).
Bunları bu kadar yazdım belki başka çözümler vardır da haber verirsiniz, benim bulduğum çok da mantıklı olmayabilir: One-Jar, Netbeans Wiki - PackagingADistributableJavaApp – OneJar. Program çalıştırılmadan önce referans kütüphanelerini otomatik olarak extract ediyor. Sonrasında siliyor.
Klasör isimlerini değiştirmeyi unutmayın, ne bileyim başka söyleyecek bir şey aklıma gelmedi.