Newsgroup: it.comp.java
Titolo: Includere un programma .exe in un jar

Ciao,
ho realizzato un'applicazione Java che fa uso (attraverso un 
Runtime.exec()) di un'applicazione esterna (foo.exe).
In pratica, quando distribuisco l'applicazione, devo distribuire il jar 
e anche la cartella con foo.exe (e il suo file di conf) [devo includere 
anche questa directory perché ovviamente il programma usa tale exe].
Il problema è che vorrei includere tale cartella direttamente nel jar.
E' possibile farlo?
Grazie



no. perchè Runtime.exec() poi lo va a cercare nel file system.



Mi viene in mente la possibilità di tenerlo nel jar poi quando ti serve lo  
scompatti come un normale zip, lo usi e poi lo cancelli.
Questa mi sa che è l'unica strada, non credo sia possibile usare  
direttamente exec con un file dentro un jar.
-- 
Using Opera's revolutionary e-mail client: 
http://www.opera.com/mail/

Manny Calavera ha scritto:

Interessante questa dello zip... hai qualche link che spieghi come si fa 
o puoi spiegarmelo tu?
Grazie!

 Runtime.exec()) di un'applicazione esterna (foo.exe).
Sembrerebbe un eseguibile per ambiente microsoft.
Come fa a funzionare una cosa del genere con altri SO ?

usi il package java.util.jar
li hai le classi che ti permettono di leggere le entries del jar.
Scompatti l'eseguibile di tuo interesse in una dir temporanea, usi il
processo e in seguito cancelli la directory temporanea e tutti i files
estratti dentro. Assicurati di aver sganciato il processo altrimenti
non riesci a cancellare la directory. Per essere sicuro che non vada
in eccezione di sistema, lascia vuoto il catch. Per la gestione del
file system usa le classi I/O-.

che senso ha usare un linguaggio "Portabile" e poi sbatterci un exe? nn 
potevi fare tutto direttamente in c... almeno ti toglievi dalle palle il 
runtime java a sto punto ?
Michele ha scritto:


robyc ha scritto:

Grazie. Ma non ho capito bene: io creo il jar, ma poi la directory con 
l'exe la inserisco nell'archivio jar? mi manca questo passo..	

Mi sembra di capire che tu debba distribuire un jar con la tua
applicazione archiviata dentro.
Mi sembra anche di intuire che tu voglia poter usare un eseguibile
windows archiviato anch'esso insieme alla tua applicazione nel file
jar (considera che cosi ti decade il discorso multipiattaforma).
Ecco, il jar si lo puoi anche creare programmaticamente, ma non mi
sembra di aver inteso questo, bensi che tu avessi bisogno di eseguire
il file foo.exe dalla tua applicazione che si trova dentro il jar.
Allora il jar lo costruisci tu con l'utility dos e crei il tuo nuovo
archivio.
Adesso è da capire a cosa serve questo eseguibile...pertanto queste
solo le mie ipotesi:
1) L'eseguibile estrae il contenuto del jar su file system e poi
esegue l'applicazione
2) L'eseguibile fa altre cose (quindi è indipendente dalla
applicazione java principale, tipo crea strutture di directory, è un
generatore di programmi autoinstallanti, altro...ecc...)
3) Puoi costruire una classe esterna al jar con un main, che scompatta
l'eseguibile e lancia il processo e fa poi le cose che ti ho descritto
nel precedente post.
4) Puoi costruire una classe esterna che scompatta tutto dal file jar
ed esegue l'eseguibile che deve fare determinate cose
sull'applicazione java.
5) Puoi lanciare direttamente l'applicazione java dal file jar facendo
un doppio click su di esso, se hai le associazioni giuste tra le
estensioni dei file e il processo incaricato di eseguirli (es. jar,
associ alla vm java.exe), costruisci un batch dove all'interno ci
metti la chiamata all'interprete java -cp eventuali classpath delle
classi dentro il file jar e percorso del package della classe Main da
chiamare dentro il jar) Qui è da verificare, non saprei dirti perche
non l'ho mai fatto, se dalla classe Main dentro il jar hai la
possibilità di autoscompattare tutti i files contenuti nello stesso
file jar e di conseguenza l'eseguibile che vuoi andare a lanciare in
runtime.
Altrimenti se il tuo problema è poter creare un pacchetto
autoinstallante, potresti scaricarti buoni software anche opensource
che ti fanno proprio quello.


 l'exe la inserisco nell'archivio jar? mi manca questo passo..
Se il tuo problema e' seplicemente mettere un file qualsiasi in un
jar... sappi che un jar non e' altro che uno zip... in altre parole
prendi il tuo gestore di archivi preferito, gli fai aprire il jar e
gli aggiungi dentro cio che piu' ti piace.