PDA

View Full Version : [java] problema con .jar


gaglioppo
02-06-2006, 09:27
ciao amici,

ho creato un file .jar per la mia applicazione, senza usare eclipse percgè nn ci sono riuscito!

ho creato il file .manifest nel seguente modo:

Manifest-Version: 1.0
Main-Class: wrapperFDS.Progetto
Class-Path: lib/xerces-2_7_0/resolver.jar lib/nekohtml.jar lib/xercesMinimal.jar lib/xerces-2_7_0/xercesImpl.jar lib/xerces-2_7_0/xml-apis.jar lib/mail.jar lib/activation.jar


in cui ho inserito i .jar che utilizzo nel progetto.
L'applicazione parte facendo da dos:

java -jar wrapper.jar

ora però ho un problema che mi sta dando molto filo da torcere:
usando il mi programma ricevo il seguente errore:

java.lang.NoSuchMethodError: org.w3c.dom.Node.getBaseURI()Ljava/lang/String;
at wrapperFDS.Albero.CercaNodo(Albero.java:330)
at wrapperFDS.Albero.CercaNodo(Albero.java:378)
at wrapperFDS.Albero.CercaNodo(Albero.java:378)
at wrapperFDS.Albero.CercaNodo(Albero.java:378)
at wrapperFDS.Albero.getValue(Albero.java:316)
at wrapperFDS.Predizione.run(Predizione.java:351)


devo dire, e non mi spiego perchè, che in lib/xerces-2_7_0/xml-apis.jar
c'è l'interfaccia Node, contenuta in org.w3c.dom e la stessa interfaccia però
si trova nella jre, precisamente in rt.jar, ugualmente in org.w3c.dom

Potrebbe essere questo che mi fa impallare l'applicazione?
Sottolineo che naturlamente in eclipse l'applicazione va bene e nn ci sono intoppi.

non so cosa pensare, ho esaurito le idee

a presto e grazie

dupa
02-06-2006, 10:27
penso che usi un jar esterno che quando lanci l'app da linea di comando non viene trovato.

devi metterlo nel classpath oppure lo ficchi nel jre di java in lib/ext

Comunque è meglio dargli il path dove trovare il jar nella linea di comando, in modo che puoi tenere separato i jar esterni da quelli built-in nel jre.

Ciao

shinji_85
02-06-2006, 16:23
Mi sto avvicinando adesso al java...
Ho fatto un programmino stupido utilizzando le SWT...
Ma non riesco a creare il jar con eclipse...
Consigli?!?

dupa
03-06-2006, 11:06
Mi sto avvicinando adesso al java...
Ho fatto un programmino stupido utilizzando le SWT...
Ma non riesco a creare il jar con eclipse...
Consigli?!?

devi andare col tasto destro sui package dei quali vuoi far il jar e fai "export", poi segui procedura guidata.

gaglioppo
05-07-2006, 07:46
mi permetto di riprendere il mio vecchio post, senza aprirne uno nuovo.
Non ho ancora risolto nulla per quanto riquarda la creazione del .jar.

Proviamo a riassumere quello che mi succede, naturalmente la mia ricerca sul forum e su google non ha prodotto risultati completi.

Uso eclipse.
ho realizzato un solo package, il programma non è complesso.
Ci sono 5 file .jar esterni che utilizzo impostandoli appunto come esterni attraverso eclipse

Creando il .jar direttamente da eclipse non mi mette nel .jar tutti i file .class, cmq risolvo mettendoceli a mano, il manifest lo imposto correttamente e qualcuno mi ha detto di metterci pure il classPath (guardate al primo messaggio di questo 3d...).

Risultato:
il programma si avvia, sembra girare, ma mi riporta quell'errore:

java.lang.NoSuchMethodError: org.w3c.dom.Node.getBaseURI()Ljava/lang/String;


Sottolineo inoltre che naturalmente il programma da eclipse funziona correttamente, quindi il problema dovrebbe risiedere nella realizzazione del .jar

Siccome di tratta di una applicazione per la mia tesi, sempre più vicina (17 luglio), dovrei sbrigarmi a realizzare il .jar, quindi accetto anche l'aiuto di un volenteroso a cui passare le cartelle del workspace di eclipse.... :-)

Prometto che posterò i ringraziamenti sul forum e manderò una birra come allegato alla vostra email se riusciremo a risolvere questo problema.

Grazie mille, vi voglio bene!

franksisca
05-07-2006, 08:15
allora, io avevo lo stesso problema con il mysqlJConnector, ovvero avevo fatto un programmino di gestione economica che si collegava a un DB mysql.
il problema era che con eclipse andava tutto bene, mentre quando creavo il jar da console, mi dava errori nel classpath del mysqlJConnector. allora io ho fatto così: ho messo il mysqlJConnector nella stessa cartella dove risiedeva il jar, e dopo di allora non ha dato più problemi.

Prova così e vedremi se va tutto bene....

DigitalKiller
05-07-2006, 09:06
Anch'io ho avuto il tuo stesso problema. Ho risolto in questo specificando nel fmanifest il classpath in questo modo
Class-Path: ./Lib/lib1.jar ./Lib/lib2.jar
e inserendo tutte le librerie necessarie al mio programma nella cartella Lib nello stesso percorso del jar del mio programma.

Ora però manda la birra! :D :sofico:
Scherzi a parte, in bocca al lupo per la tesi! :)

PGI-Bis
05-07-2006, 10:06
Il tuo jar è corretto.

In pratica durante la compilazione hai usato le librerie org.w3c.dom nella loro ultima versione (DOM 3).

Durante l'esecuzione usi invece le stesse librerie ma nella versione DOM 2.

Il codice byte delle tue classi contiene invocazioni di un metodo DOM 3 (getBaseURI). Durante il procedimento di verifica della classe, la piattaforma rileva che il metodo getBaseURI a cui fa riferimento il bytecode non è collegabile (la classe org.w3c.dom.Node DOM 2 non ha getBaseURI, la stessa classe in DOM 3 ce l'ha).

Da quanto mi pare di leggere sul loro sito, Xerces si ferma a DOM 2 ma non vorrei sbagliarmi.

Comunque sia, la soluzione è semplicissima: a mare Xerces, vai con le sole librerie standard della piattaforma Java (DOM 3 compliant). Oppure non usare metodi di oggetti nel package org.w3c.dom che dichiarno d'essere DOM 3.

gaglioppo
05-07-2006, 15:12
Il tuo jar è corretto.

In pratica durante la compilazione hai usato le librerie org.w3c.dom nella loro ultima versione (DOM 3).

Durante l'esecuzione usi invece le stesse librerie ma nella versione DOM 2.

Il codice byte delle tue classi contiene invocazioni di un metodo DOM 3 (getBaseURI). Durante il procedimento di verifica della classe, la piattaforma rileva che il metodo getBaseURI a cui fa riferimento il bytecode non è collegabile (la classe org.w3c.dom.Node DOM 2 non ha getBaseURI, la stessa classe in DOM 3 ce l'ha).

Da quanto mi pare di leggere sul loro sito, Xerces si ferma a DOM 2 ma non vorrei sbagliarmi.

Comunque sia, la soluzione è semplicissima: a mare Xerces, vai con le sole librerie standard della piattaforma Java (DOM 3 compliant). Oppure non usare metodi di oggetti nel package org.w3c.dom che dichiarno d'essere DOM 3.

Ora non ho il mio programma sottomano, in ogni caso non so se posso fare a meno di Xerces, mi pare di avere usato il suo parser.

Scusami, ma nonostante abbia fatto questo tool in java non sono molto pratico.

Mi pare di essermi accorto che getBaseURI non era implementato, ma non mi spiego come mai su eclipse funziona e nel jar no.

Inoltre sui computer qui in laboratorio, il mio tool non funziona nemmeno su eclipse e mi crea problemi proprio su quel metodo.

Mi riservo di chiederti altro, quando ci metterò mano, spero di non arrecarti troppo disturbo.

Grazie, grazie grazie a tutti
e crepi il lupo :-D

a presto