Documentazione di Kickstart 2.0
Questa pagina riporta la documentazione online relativa alla distribuzione Kickstart 2.0.
Requisiti
Occorre un sistema operativo Windows con installato un ambiente di esecuzione Java (JRE) versione J2SE 1.4 o successiva.
Installazione
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 cominciare
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.
Uso dell'interfaccia a finestre
Avvia Kickstart.exe. Vedrai apparire questa interfaccia:
Per generare il tuo EXE segui questi passi:
- Dai un nome alla tua applicazione. E' obbligatorio.
- Scegli la tipologia della tua applicazione. Se scegli Finestre la tua applicazione sarà trattata come una comune GUI di Windows, mentre l'opzione Console farà avviare il tuo programma all'interno del prompt dei comandi.
- Inserisci il percorso del JAR con la tua applicazione. E' obbligatorio.
- Inserisci il percorso dell'EXE che sarà generato. E' opzionale. Se lasci bianco il campo l'EXE sarà posizionato nella stessa directory contenente il file JAR del campo precedente, ed avrà il suo stesso nome (ad eccezione dell'estensione, che sarà naturalmente .exe).
- Scegli un file ICO di Windows da utilizzare come icona per l'EXE generato. E' opzionale. Se omesso il generatore userà un'icona predefinita.
- Inserisci gli eventuali parametri statici per la JVM richiesti dalla tua applicazione. E' opzionale.
- Premi il bottone Genera EXE.
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
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.
- name. E' il nome della tua applicazione. E' obbligatorio.
- type. E' il tipo della tua applicazione. Valori validi sono gui e console, che ricalcano rispettivamente le opzioni Finestre e Console dell'interfaccia grafica. E' opzionale e se l'attributo viene omesso il generatore userà gui come valore predefinito.
- jar. E' il percorso che conduce al JAR eseguibile. Ovviamente è obbligatorio.
- exe. E' il percorso che conduce all'EXE che deve essere generato dal task. Differentemente dall'interfaccia grafica, questo attributo è obbligatorio nel task di Ant.
- icon. E' il percorso che conduce al file ICO di Windows che dovrà essere impiegato come icona dell'EXE generato. E' opzionale e se l'attributo viene omesso il generatore farà uso di un'icona predefinita.
- jvmparameters. E' la linea con i parametri che dovranno essere forniti alla Java Virtual Machine ogni volta che l'applicazione sarà avviata. E' opzionale.
E' tutto, gente!
Problemi di programmazione
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.