Occorre un sistema operativo Windows con installato un ambiente di esecuzione Java (JRE) versione J2SE 1.4 o successiva.
Scompatta i contenuti della distribuzione in una cartella del tuo file system. Fai attenzione a mantenere inalterata la seguente struttura dei file:
<kickstart-directory> | +- lib | | | +- kickstart.jar | +- Kickstart.exe
Questa configurazione è infatti necessaria per avviare correttamente l'interfaccia grafica del programma.
Prima di usare Kickstart è necessario che la tua applicazione Java, una volta completata, venga impacchettata in un archivio JAR eseguibile. Può essere fatto usando il tool a riga di comando jar, che fa parte del JDK. Non dimenticare di includere nel file manifest dell'archivio la direttiva Main-Class, necessaria per rendere eseguibile il JAR. Se non hai capito di cosa si sta parlando controlla la documentazione del tuo JDK, oppure attraversa questo collegamento.
Se il tuo JAR funziona correttamente lanciando da riga di comando l'istruzione
java -jar yourapplication.jar
allora va bene per essere trasformato in un EXE di Kickstart.
Avvia Kickstart.exe. Vedrai apparire questa interfaccia:
Per generare il tuo EXE segui questi passi:
Facile, no?
Inoltre l'interfaccia di Kickstart ha un'altra caratteristica: la possibilità di gestire dei progetti. Puoi salvare su file i parametri impostati nei campi, per ricaricarli successivamente.
Il task Ant di Kickstart ti consente di richiamare il generatore di EXE dall'interno di una procedura di build di Ant. Per farne uso copia kickstart.jar (lo trovi nella cartella lib della distribuzione) in un punto del file system che sia raggiungibile partendo dal tuo build.xml.
Per prima cosa devi dichiarare il nuovo task all'interno del build.xml:
<taskdef name="kickstart" classname="it.sauronsoftware.kickstart.ant.KickstartTask" classpath="<path>/kickstart.jar" />
Fai attenzione ad inserire come valore dell'attributo classpath il corretto percorso che porta a kickstart.jar, altrimenti il task non potrà essere caricato.
Una volta che è stato definito, il task può essere richiamato secondo il seguente modello:
<kickstart name="..." type="..." jar="..." exe="..." icon="..." jvmparameters="..." />
Ecco un veloce riferimento sugli attributi del task.
E' tutto, gente!
Lascia che ti spieghi come funziona un EXE generato da Kickstart. Quando l'utente lo lancia con un doppio-clic, l'eseguibile ricostruisce il JAR originale dell'applicazione in una cartella temporanea di Windows. A questo punto, in trasparenza, viene passato al sistema un comando java -jar (o javaw -jar, a seconda del tipo dell'applicazione) con lo scopo di avviare il JAR rigenerato in precedenza. Siccome la directory temporanea non coincide con la cartella dove è conservato l'EXE, la proprietà di sistema di Java user.dir assumerà un valore inaspettato ed imprevedibile. Questo fatto influenza l'efficacia di ogni percorso relativo usato nell'intera applicazione, poiché la classe File di Java risolve i percorsi relativi in funzione del valore assunto proprio dalla proprietà user.dir.
Che significa? Immagina che la tua applicazione risiede nella cartella "C:\miaapp". Quando fai qualcosa come
File f = new File("config.txt");
significa"C:\miaapp\config.txt" se esegui direttamente il JAR, ma vuol dire "<un-percorso-imprevedibile>\config.txt" se l'applicazione è stata lanciata mediante un EXE generato con Kickstart.
Kickstart non può modificare dinamicamente il valore di user.dir poiché, in breve, falsando il valore la JVM non sarebbe più in grado di caricare correttamente il programma e le risorse collegate.
Per risolvere il problema gli EXE generati da Kickstart forniscono all'applicazione in fase di lancio una proprietà di sistema aggiuntiva, alternativa a user.dir, chiamata kickstart.exe.dir, che riporta l'esatto percorso da cui l'EXE è stato lanciato.
Per sviluppare codice robusto, quindi, dovresti evitare l'uso di percorsi puramente relativi. Per riferirti ad un file in maniera relativa osserva il seguente modello:
String userDir = System.getProperty("kickstart.exe.dir", System.getProperty("user.dir")); File config = new File(userDir, "config.txt");
Questo codice acquisisce il valore della proprietà kickstart.exe.dir. Se non lo trova (non è detto che l'EXE generato di Kickstart sia l'unica maniera in cui distribuirai il tuo software) allora considera valido il valore di user.dir. Successivamente il riferimento al file viene costruito utilizzando il valore letto, in modo da evitare che la classe File faccia uso del valore di user.dir quando non dovrebbe.