BUBS - Barely Ubuntu Bar Sport

Nerd Bar => Tips & Tricks => Discussione aperta da: TonyWhite il 03 Aprile 2012, 20:14:54

Titolo: [Java] - Applicazioni portable
Inserito da: TonyWhite il 03 Aprile 2012, 20:14:54
Pubblico una piccola chicca che vi aiuterà a distribuire più facilmente i vostri programmi Java.

Capita qualche volta di dover dare un programma java a qualcuno che non sia un programmatore, beta tester, smanettone o Mac Gyver. E questo "qualche volta" coincide con il rilascio ufficiale del programma.
Nella situazione più semplice hai un file jar, fai doppio click e il tuo programma parte.
Nella situazione più tragica (99%) devi installare librerie native esterne, cambiare classe di avvio, passare argomenti, fare in modo che tutto possa essere portable e forse il programma parte.

Il classpath viene trattato in molti forum ed è più o meno la stessa solfa: devi installare le librerie a mano e quindi addio alla mia bella applicazione portable. Se invece l'applicazione non è bella, direte addio alla vostra brutta applicazione portable.

Supponiamo di avere un'applicazione (resisti.jar) che fa uso delle librerie nyan.so nyan.dll nyan.jnilib gestite da nyan.jar.
La nostra applicazione potrà essere portable grazie a questo script di avvio (lo so, "script" è una parola grossa)
Codice (resisti) Seleziona
#!/bin/sh
APPDIR=$(dirname "$0")
java -Djava.library.path="$APPDIR" -cp "$APPDIR/*" Resisti $@


APPDIR=$(dirname "$0") è la cartella corrente
java avvia la Java Virtual Machine (JVM)
-Djava.library.path="$APPDIR" definisce le librerie native: nyan.so nyan.dll e nyan.jnilib
-cp "$APPDIR/*" definisce il classpath dei nostri jar: nyan.jar e resisti.jar
Resisti è il nome della classe che contiene il metodo main
$@ serve per passare gli argomenti all'applicazione senza mettere mano allo script (parola grossa[CITAZIONE NECESSARIA])


Script batch per Windows
Codice (resisti.bat) Seleziona
echo off
set "appdir=%~dp0"
java -Djava.library.path="%appdir%" -cp "%appdir%Pacchetto.jar;%appdir%Supporto.jar;%appdir%Nyan.jar;%appdir%Resisti.jar" Resisti %*


echo off disabilita l'eco delle istruzioni
set "appdir=%~dp0" è la cartella corrente
java avvia la Java Virtual Machine (JVM)
-Djava.library.path="$APPDIR" definisce le librerie native: nyan.so nyan.dll e nyan.jnilib
-cp "%appdir%Pacchetto.jar;%appdir%Supporto.jar;%appdir%Nyan.jar;%appdir%Resisti.jar" definisce il classpath dei nostri jar uno per uno
Resisti è il nome della classe che contiene il metodo main
%* serve per passare gli argomenti all'applicazione senza mettere mano allo script (parola grossa[CITAZIONE NECESSARIA])


E buttate tutto brutalmente in una cartella.
L'unica cosa che cambia tra un sistema operativo e l'altro è lo script. Ma siccome con Linux copre più del 99% dei sistemi operativi esistenti e Windows il 0,9% su questo pianeta, mi posso ritenere soddisfatto e dire che l'applicazione è portable ed anche crossplatform.
Cotto e mangiato Ed il gioco è fatto.
Titolo: Re:[Java] - Applicazioni portable
Inserito da: TonyWhite il 04 Aprile 2012, 10:32:10
Changelog
Ho aggiunto lo script di avvio per Windows

Tuttora sono presenti i seguenti bug

Ulteriori aggiornamenti a breve
Titolo: Re:[Java] - Applicazioni portable
Inserito da: the_original_g il 04 Aprile 2012, 12:41:08
http://ninjacave.com/jarsplice
http://launch4j.sourceforge.net/

:lkof:
Titolo: Re:[Java] - Applicazioni portable
Inserito da: TonyWhite il 04 Aprile 2012, 14:43:10
Grazie Genno. :ueue:
Lo script batch in confronto ad una montagna di merda di un grasso mammuth che soffre di diarrea fa decisamente più schifo :facepalm:
Cambia per ogni sistema Windows che testo :facepalm:
Titolo: Re:[Java] - Applicazioni portable
Inserito da: TonyWhite il 04 Aprile 2012, 14:57:40
Lo sto provando. Vediamo un po' :pipp:
Titolo: Re:[Java] - Applicazioni portable
Inserito da: the_original_g il 04 Aprile 2012, 14:58:29
La combinazione dei due rende la distribuzione di un programma java non più difficile di quella di un programma .net, con la differenza che senza il secondo lo distribuisci senza il minimo problema anche sui sistemi veramente operativi :asd:
Titolo: Re:[Java] - Applicazioni portable
Inserito da: TonyWhite il 04 Aprile 2012, 18:44:35
Il primo mi piace e mi hai risparmiato mezza giornata di lavoro +1 :gtfo:
Mi vedrò il secondo con più calma :beer: