Newsgroup: it.comp.java
Titolo: Strano comportamenteo della JVM

Ho creato il jar di una piccola applicazione che ho realizzato ed ho provato
ad eseguirlo da NetBeans, l'IDE che utilizzo per sviluppare (che parolone
!!)...tutto bene. Se invece provo a lanciarlo da linea di comando, oppure
cliccandoci sopra 2 volte solleva l'eccezione 
		java.lang.NoClassDefFoundException : org/apache/regexp/RE
ovvero non riesce a risolvere le dipendenze. La cosa bella è che la libreria
che contiene il package org.apache.regexp si trova nella cartella
jre\lib\ext, quindi la JVM dovrebbe trovarla senza problemi !!!
Mah, mistero della fede
________________________________________________
Se c'è soluzione perché ti preoccupi ??
Se non c'é soluzione perché ti preoccupi ???
________________________________________________

Mah, mistero della fede
Quante e quali JVM sono installate sulla tua macchina? ti dico questo
perchè mi era capitato di sviluppare una volta su una macchina su
c'era installato JBuilder 9 (che si porta dentro il jdk 1.4.1):
all'interno dell'ide l'esecuzione e il debugging andavano per il
meglio, il profilo del progetto specificava che la compilazione doveva
essere eseguita con il jdk interno. Quando ho mandato in esecuzione il
jar finale dalla riga di comando non era in grado di trovare alcune
classi. Questo perchè prima di JBuilder era stato installato il
jdk1.3.1 .
Ti consiglio una prova bècera: via riga di comando, portati nella
cartella contenente il launcher della jvm interessata (quella su cui
hai copiato la libreria di apache regexp) e avvia il jar da là dentro.
Fammi sapere come va :D
--
"tanto va la gatta al largo che affoga"
(per rispondere personalmente leva IlDitoDalCulo)

 Fammi sapere come va :D
Ho la JVM 1.4.2, anzi ne ho 2 : quella del JRE e quella dell'SDK. Ho notato
che la JVM in uso sulla mia macchina è quella del JRE, che si trova in
%JAVA_HOME%\J2RE1.4.2, quindi ho risolto copiando la libreria di apache
nella cartella %JAVA_HOME%\J2RE1.4.2\lib\ext. Perché non vede le librerie
utilizzate dall'SDK ???
Ti ringrazio per l'aiuto, e volevo approfittarne per chiederti un'altra
cosa. Se volessi portare il jar della mia applicazione su un altro computer
che non possiede la libreria di apache, come posso fare per includere tale
libreria nel mio jar ed indicare (magari nel manifest) di cercare i
componenti necessari in tale libreria (ovvero quella che ho voluto includere
nel jar). Scusami la poca chiarezza ma mi sono impicciato.
Grazie, Claudio


nel jar). Scusami la poca chiarezza ma mi sono impicciato.
Tranquillo, ho capito perfettamente quello che cerchi, anche perchè su
questo problema ci ho sbattuto la testa forte forte fino a 20 giorni
fa...
Si può fare in molti modi... puoi "estrarre" la libreria e includerla
nel jar dell'applicazione mantenendo la struttura delle cartelle,
oppure puoi creare un .cmd che aggiunga il percorso della libreria con
-cp (in questo modo puoi mettere la libreria dove vuoi), o addirittura
includere il jar della libreria come "risorsa" binaria all'interno del
jar della tua applicazione, per poi copiarla nella JVM interessata
all'avvio se essa non è presente (io faccio così e funziona
egregiamente). In quest'ultimo modo però devi accertarti di
"riavviare" la jvm dopo avero copiato le librerie, oppure se hai
voglia e tempo ti crei un classloader customizzato (cosa che non ho
fatto).
Se vuoi ti mando via mail un esempio.


 
Ciao,
nel manifest dell'applicazione usi l'attributo Class-Path: per specificare la lib.
Per esempio
Class-Path: commons-net-1.0.1-dev.jar
permette di accedere alla lib sopra specificata che si trova nella stessa dir 
del jar contenente l'applicazione.
A proposito di jre e sdk, se li hai installati entrambi o ne "vedi" uno o 
l'altro(a dipendenza di dove punta JAVA_HOME, se vuoi usare quella del sdk devi 
farla puntare alla dir jre nella dir di installazione del sdk).
http://java.sun.com/j2se/1.4.2/docs/guide/extensions/spec.html#installed
Marco

Grazie per l'aiuto !!
