SWTLoader, tutto in un Jar

Logo del programma SWTLoader

I programmi che usano SWT o SwingWT, come tutti i software Java che accedono a librerie native, sono tipicamente difficili da distribuire, in quanto non si possono lanciare con un semplice doppio click sul file Jar.

Questo perchè le librerie native devono essere installate in una cartella nel PATH del sistema, oppure la Virtual Machine deve essere lanciata con apposite opzioni da riga di comando – entrambe operazioni che variano a seconda del sistema operativo in uso.
SWTLoader è un “hack elegante” che permette di creare un unico Jar autoestraente con tutte le librerie del caso – indipendentemente dal sistema operativo basterà un doppio click per lanciare il programma!

Come si usa

Per usare SWTLoader devi:

  • inserire la riga import net.moioli.swtloader.*; nella classe con il metodo main;
  • Creare un oggetto SWTLoader all’inizio del metodo main(), come in questo esempio:
public static void main(String[] args){
new SWTLoader("packagename.jar");
...

 

  • includere nel Jar tutte le librerie necessarie (.dll, .so, .jnilib e così via). Puoi farlo manualmente come con i file ZIP, oppure tramite uno script, ad esempio di Apache Ant:

 

<target name="demo-SwingWT-linux" >
  <javac srcdir="${srcDir}" destdir="${buildDir}">
    <classpath>
      <pathelement path="swt.jar"/>
      <pathelement path="swt-pi.jar"/>
    </classpath>
    <include name="**/*.java" />
  </javac>
  <unjar src="$swt.jar" dest="${buildDir}"/>
  <unjar src="$swt-pi.jar" dest="${buildDir}"/>
  <copy todir="${buildDir}">
    <fileset dir="${swtLinuxLibDir}/">
    <include name="*.so"/>
  </fileset>
  </copy>
  <jar destfile="${buildDir}/demo-SwingWT-linux.jar" basedir="${buildDir}">
  <fileset dir="${buildDir}" >
    <include name="**/*.class" />
    <include name="**/*.so"/>
  </fileset>
  <manifest>
    <attribute name="Main-Class" value="SWTDemo"/>
  </manifest>
  </jar>
</target>

Il Jar creato funzionerà con un semplice doppio click o con l’usuale comando java -jar pacchetto.jar. Niente installer, niente configurazione, su tutte le piattaforme!

Come funziona?

Per prima cosa SWTLoader crea una cartella temporanea in una locazione opportuna dove decomprime i file corrispondenti alle librerie native presenti nel Jar. A quel punto, crea una nuova istanza della Java Virtual Machine con l’opzione -D opportuna (questo fa sì che vengano caricate le librerie native) e infine termina la vecchia istanza della macchina virtuale.
Inoltre, se le librerie sono caricabili fin dall’inizio SWTLoader lascia che il programma venga eseguito normalmente.

Scaricalo!

Puoi usarlo gratuitamente, per i dettagli sull’utilizzo vedi la pagina delle licenze.

Comments are closed.