Creare un file eseguibile .exe per le applicazioni Java con Launch4j

Creare un file eseguibile .exe per le applicazioni Java con Launch4j

In questo articolo vedremo come poter creare un file .exe (un eseguibile in ambiente Windows) che permetta il lancio di una applicazione Java semplicemente facendo un doppio click su di esso, come avviene per qualsiasi applicazione Windows nativa.

Pentaho Mondrian: un motore OLAP per Java
PrettyFaces: una soluzione per l’URL rewriting per Servlet, JSF e Java EE
Installiamo e configuriamo Apache Tomcat 7
La schermata principale di Launch4j

in questa schermata definiamo le informazioni basilari per la creazione del nostro file .exe. Dobbiamo innanzitutto definire il nome ed il path dove verrà memorizzato del nostro file exe, dopo bisogna indicare il path del file .jar della nostra applicazione che si vuol rendere eseguibile.

La checkbox sottostante (Don’t wrap the jar, launch only) se non flaggata ingloberà il file .jar all’interno dell’exe in questo modo potremo distribuire il solo file .exe.

Se non è presente un file Manifest nel .jar dobbiamo indicarne uno esterno nel campo Manifest, mentre nel campo Icon indichiamo il file .ico che sarà l’icona del nostro file .exe.

Il parametro Change dir permette di specificare in quale directory spostarsi prima di eseguire l’applicazione: ciò è importante se l’applicazione fa riferimento a file utilizzando path relativi alla propria directory di esecuzione. Inserendo un punto (.) come valore Launch4j si sposterà nella directory dell’eseguibile prima di eseguire l’applicazione, altrimenti assume come directory di esecuzione quella dove è contenuto l’eseguibile launch4j.exe (tipicamente in C:ProgrammiLaunch4j). In Command line args possiamo inserire tutti i parametri che l’applicazione deve ricevere da riga di comando.

Possiamo poi specificare il livello di priorità del processo in Process Priority e se customizzare il nome del processo. Infine se non viene rilevata una JRE compatibile con quella specificata nel tab JRE (che vedremo a breve) possiamo inserire il titolo dell’errore da lanciare (in Error Title) e l’URL da aprire nel browser per poter scaricare quella specifica JRE.

Esaminiamo ora la scheda JRE:

La scheda JRE

In essa possiamo specificare una eventuale JRE da includere nel nostro bundle tramite il campo Bundled JRE Path, nel quale indicheremo il path in cui si trova una JRE che abbiamo scaricato in formato .exe.

Inoltre, anche se non indicato, è obbligatorio specificare una versione minima della JRE richiesta (Min JRE version), mentre è opzionale indicare la massima (Max JRE version).

Possiamo inoltre indicare la dimensione dell’Heap da riservare all’inizio e quella massima sia in termini di MegaByte o in termini percentuali della memoria disponibile (Initial e Max Heap size).

Visualizziamo la scheda Splash:

La scheda Splash

In questa scheda possiamo abilitare la visualizazzione di uno splash screen prima del lancio del nostro applicativo, ne indichiamo il path dell’immagine ed il timeout di durata.

Esaminiamo la scheda Messages:

La scheda Messages

Nella scheda Messagges possiamo specificare e customizzare tutti i messaggi di errore che l’applicativo .exe può lanciare.

Infine vediamo la scheda Single Instance:

La scheda Single Instance

tramite questa scheda è possibile definire una variabile mutex in modo da permettere l’esecuzione di una singola istanza della nostra applicazione.

Una volta configurato il nostro applicativo dobbiamo salvare la configurazione in un file .xml tramite l’icona a forma di dischetto. Dopo aver salvato creiamo l’exe con il tasto a forma di rotellina e lo lanciamo col tasto play.

I file .xml di configurazione dell’applicativo sono di questo tipo:

<launch4jConfig>
<headerType>gui|console</headerType>
<outfile>file.exe</outfile>
<jar>file</jar>
<dontWrapJar>true|false</dontWrapJar>
<errTitle>text</errTitle>
<downloadUrl>http://java.com/download</downloadUrl>
<supportUrl>url</supportUrl>
<cmdLine>text</cmdLine>
<chdir>path</chdir>
<priority>normal|idle|high</priority>
<customProcName>true|false</customProcName>
<stayAlive>true|false</stayAlive>
<icon>file</icon>
<obj>header object file</obj>
...
<lib>w32api lib</lib>
...
<var>var=text</var>
...
<classPath>
<mainClass>main class</mainClass>
<cp>classpath</cp>
...
</classPath>
<singleInstance>
<mutexName>text</mutexName>
<windowTitle>text</windowTitle>
</singleInstance>
<jre>
<!-- Specify one of the following or both -->
<path>bundled JRE path</path>
<minVersion>x.x.x[_xx]</minVersion>
<maxVersion>x.x.x[_xx]</maxVersion>
<jdkPreference>jreOnly|preferJre|preferJdk|jdkOnly</jdkPreference>
<!-- Heap sizes in MB and % of free memory -->
<initialHeapSize>MB</initialHeapSize>
<initialHeapPercent>%</initialHeapPercent>
<maxHeapSize>MB</maxHeapSize>
<maxHeapPercent>%</maxHeapPercent>
<opt>text</opt>
...
</jre>
<splash>
<file>file</file>
<waitForWindow>true|false</waitForWindow>
<timeout>seconds [60]</timeout>
<timeoutErr>true|false</timeoutErr>
</splash>
<versionInfo>
<fileVersion>x.x.x.x</fileVersion>
<txtFileVersion>text</txtFileVersion>
<fileDescription>text</fileDescription>
<copyright>text</copyright>
<productVersion>x.x.x.x</productVersion>
<txtProductVersion>text</txtProductVersion>
<productName>text</productName>
<companyName>text</companyName>
<internalName>filename</internalName>
<originalFilename>filename.exe</originalFilename>
</versionInfo>
<messages>
<startupErr>text</startupErr>
<bundledJreErr>text</bundledJreErr>
<jreVersionErr>text</jreVersionErr>
<launcherErr>text</launcherErr>
</messages>
</launch4jConfig>

come possiamo notare i tag hanno un nome molto simile a quello presente nei campi delle varie schede di launch4j.

Resta solo un’ultima precisazione da fare nell’utilizzo di Launch4j, nel caso avessimo dei programmi che visualizzano dell’output in console non possiamo utilizzare il tool grafico ma dobbiamo lanciare la modalità da console tramite il comando launch4jc.exe. A questo applicativo va passato come input un file di configurazione come quello visto in precedenza dove nel campo headerType dobbiamo specificare il valore console:

<headerType>console</headerType>

Ad esempio un file xml minimale per un applicativo Java che funziona esclusivamente da console è il seguente:

<launch4jConfig>
<dontWrapJar>false</dontWrapJar>
<headerType>console</headerType>
<jar>C:testlaunch4jtest.jar</jar>
<outfile>C:testlaunch4jtest.exe</outfile>
<chdir>.</chdir>
<priority>normal</priority>
<downloadUrl>http://java.com/download</downloadUrl>
<supportUrl></supportUrl>
<customProcName>true</customProcName>
<stayAlive>false</stayAlive>
<jre>
<path></path>
<minVersion>1.5.0</minVersion>
<maxVersion></maxVersion>
<jdkPreference>preferJre</jdkPreference>
</jre>
</launch4jConfig>

dove test.jar è l’applicazione Java e test.exe il file .exe di output. Scritto il file xml diamo il seguente comando per generare il file .exe:

LAUNCH4J_PATH\launch4jc.exe config.xml

dove LAUNCH4J_PATH è il path di installazione di launch4j (tipicamente C:ProgrammiLaunch4j su Windows) e config.xml è il nome del file xml di configurazione che possiamo anche generare utilizzando il tool grafico e poi cambiando il valore dell’headerType da gui a console.

Riferimenti

Sito web di Launch4j: http://launch4j.sourceforge.net/

PAGES

1 2

COMMENTS

WORDPRESS: 0