/ Forside / Teknologi / Udvikling / Java / Nyhedsindlæg
Login
Glemt dit kodeord?
Brugernavn

Kodeord


Reklame
Top 10 brugere
Java
#NavnPoint
molokyle 3688
Klaudi 855
strarup 740
Forvirret 660
gøgeungen 500
Teil 373
Stouenberg 360
vnc 360
pmbruun 341
10  mccracken 320
Problemer med classpath sammen med jar fil
Fra : Karl Peder Olesen


Dato : 28-12-02 01:31

Hej

Jeg sidder med et lille backup program, som efter endt udvikling skal
"ende sine dage" i en jar fil.

Backup programmet bruger et reg expr. library i en anden jar fil. Det
virkede fint sålænge jeg bare kørte backup programmet uden at lave det
til en jar fil, dvs. med en bat fil ala:
   set classpath=.;<sti til library>\regexp.jar
   java Backup <parametre>

Nu laver jeg så en jar fil, med en manifest fil der udpeger
Backup.class som main class - og laver mig en bat fil igen:
   set classpath=.;<sti til library>\regexp.jar
   java -jar backup.jar <parametre>

Programmet kører fint, men når det når til det sted hvor reg expr.
klasserne skal bruges, kastes der en exception: NoClassDefFoundError

Mit store spørgsmål: Hvorfor???

På forhånd tak for hjælpen
mvh
Karl Peder


 
 
Stig Tanggaard (28-12-2002)
Kommentar
Fra : Stig Tanggaard


Dato : 28-12-02 22:28

Prøv med

java -classpath <pathtildinejars> mainclass

stig


"Karl Peder Olesen" <kpo@mail1dotstofanetdotdk> skrev i en meddelelse
news:3e0cef22.25742095@news.stofanet.dk...
> Hej
>
> Jeg sidder med et lille backup program, som efter endt udvikling skal
> "ende sine dage" i en jar fil.
>
> Backup programmet bruger et reg expr. library i en anden jar fil. Det
> virkede fint sålænge jeg bare kørte backup programmet uden at lave det
> til en jar fil, dvs. med en bat fil ala:
> set classpath=.;<sti til library>\regexp.jar
> java Backup <parametre>
>
> Nu laver jeg så en jar fil, med en manifest fil der udpeger
> Backup.class som main class - og laver mig en bat fil igen:
> set classpath=.;<sti til library>\regexp.jar
> java -jar backup.jar <parametre>
>
> Programmet kører fint, men når det når til det sted hvor reg expr.
> klasserne skal bruges, kastes der en exception: NoClassDefFoundError
>
> Mit store spørgsmål: Hvorfor???
>
> På forhånd tak for hjælpen
> mvh
> Karl Peder
>



Karl Peder Olesen (29-12-2002)
Kommentar
Fra : Karl Peder Olesen


Dato : 29-12-02 11:21

On Sat, 28 Dec 2002 22:27:54 +0100, "Stig Tanggaard"
<stigth@stofanet.dk> wrote:

>Prøv med
>
>java -classpath <pathtildinejars> mainclass
>
>stig
>
Jeg har nu prøvet med:

java -classpath <path>\regexp.jar -jar backup.jar <parametre>
java -classpath <path> -jar backup.jar <parametre>
java -classpath .;<path> ......
java -classpath .;<path>\regexp.jar ....

....hvor <path> er stien hvor regexp.jar befinder sig og <parametre> er
de parametre, som backup programmet skal bruge. Men lige lidt hjælper
det...

Løsninger/løsningsforslag er derfor stadig meget meget velkomne.

mvh
Karl Peder



Anders K. Olsen (29-12-2002)
Kommentar
Fra : Anders K. Olsen


Dato : 29-12-02 12:51

"Karl Peder Olesen" <kpo@mail1dotstofanetdotdk> skrev i en meddelelse
news:3e0ecba5.89762061@news.stofanet.dk...
> On Sat, 28 Dec 2002 22:27:54 +0100, "Stig Tanggaard"
> <stigth@stofanet.dk> wrote:
>
> >Prøv med
> >
> >java -classpath <pathtildinejars> mainclass
> >
> >stig
> >
> Jeg har nu prøvet med:
>
> java -classpath <path>\regexp.jar -jar backup.jar <parametre>
> java -classpath <path> -jar backup.jar <parametre>
> java -classpath .;<path> ......
> java -classpath .;<path>\regexp.jar ....
>
> ...hvor <path> er stien hvor regexp.jar befinder sig og <parametre> er
> de parametre, som backup programmet skal bruge. Men lige lidt hjælper
> det...
>
> Løsninger/løsningsforslag er derfor stadig meget meget velkomne.

I følge java -h er fremgangsmåden:

Usage: java [-options] class [args...]
(to execute a class)
or java -jar [-options] jarfile [args...]
(to execute a jar file)

Dvs. du kan prøve med:

java -jar -classpath <path>\regexp.jar backup.jar <parametre>

Det ser lidt underligt ud, og jeg ved ikke om det virker. En anden mulighed
var måske:

set CLASSPATH=<path>\regexp.jar;backup.jar
java -classpath %CLASSPATH% <main-class-in-backup.jar> <parametre>

/Anders



Karl Peder Olesen (29-12-2002)
Kommentar
Fra : Karl Peder Olesen


Dato : 29-12-02 12:38

On Sun, 29 Dec 2002 12:51:16 +0100, "Anders K. Olsen"
<ako@post.tele.dk> wrote:

<snip>
>
>Dvs. du kan prøve med:
>
>java -jar -classpath <path>\regexp.jar backup.jar <parametre>
>
>Det ser lidt underligt ud, og jeg ved ikke om det virker. En anden mulighed
>var måske:
>
>set CLASSPATH=<path>\regexp.jar;backup.jar
>java -classpath %CLASSPATH% <main-class-in-backup.jar> <parametre>
>
>/Anders

Det første forslag virker ikke. Det sidste forslag virker, dvs. ved
ikke at køre jar-filen backup.jar direkte (-jar optionen), men ved at
inkludere den i classpath - og så udføre med "java -classpath ...
<main klasse> ...". Og det er jo for så vidt fint - tak for hjælpen


Men det undrer mig lidt at java tilsyneladende ignorerer classpath når
man kører jar-filer vha. jar-optionen. Er det "forventet opførsel" /
er der noget jeg ikke har forstået? Er der i givet fald en anden måde
hvorpå man kan specificere en anden jar-fil i classpath ifm. "java
-jar ...."

(ja, det er jo ikke fordi det ikke virker nu, men det ville være
interessant for mig at få lidt baggrundsviden med i købet - jeg er
ikke så voldsomt habil ud i anvendelsen af jar-filer )

mvh
Karl Peder


Frederik Hansen (29-12-2002)
Kommentar
Fra : Frederik Hansen


Dato : 29-12-02 13:54

Hej Karl

> Men det undrer mig lidt at java tilsyneladende ignorerer classpath når
> man kører jar-filer vha. jar-optionen. Er det "forventet opførsel" /
> er der noget jeg ikke har forstået? Er der i givet fald en anden måde
> hvorpå man kan specificere en anden jar-fil i classpath ifm. "java
> -jar ...."

Ja, det er forventet opførelse. Man kan i sin manifest fil skrive

Class-Path: regexp.jar

og så mener jeg at regexp.jar blot skal ligge ved siden af din anden
jar-fil..

--
Venlig hilsen

Frederik Hansen

Sun Certified Programmer
for the Java(tm) 2 Platform

email : frederik@roirex.dk
www : www.roirex.dk


Karl Peder Olesen (30-12-2002)
Kommentar
Fra : Karl Peder Olesen


Dato : 30-12-02 00:26

On Sun, 29 Dec 2002 13:54:15 +0100, Frederik Hansen
<nospam-thanks-frederik@roirex.dk> wrote:

>Hej Karl
>
>> Men det undrer mig lidt at java tilsyneladende ignorerer classpath når
>> man kører jar-filer vha. jar-optionen. Er det "forventet opførsel" /
>> er der noget jeg ikke har forstået? Er der i givet fald en anden måde
>> hvorpå man kan specificere en anden jar-fil i classpath ifm. "java
>> -jar ...."
>
>Ja, det er forventet opførelse. Man kan i sin manifest fil skrive
>
>Class-Path: regexp.jar
>
>og så mener jeg at regexp.jar blot skal ligge ved siden af din anden
>jar-fil..
>
Lige for at tjekke om jeg har forstået det ret: Vil det sige at den
eneste måde til at udnytte klasser uden for sin egen jar fil er at
specificere classpath i manifest filen?

Dermed skal man altså - allerede når jar filen laves - kende den
relative sti til f.eks. andre jar filer!? Det kunne jo give problemer
hvis man udnytter nogle utility klasser el.lign. som man ikke lige ved
hvor den aktuelle bruger har placeret (men så har man måske tabt?)

mvh
Karl Peder


Frederik Hansen (30-12-2002)
Kommentar
Fra : Frederik Hansen


Dato : 30-12-02 10:09

> Lige for at tjekke om jeg har forstået det ret: Vil det sige at den
> eneste måde til at udnytte klasser uden for sin egen jar fil er at
> specificere classpath i manifest filen?

Ja, for selvkørende jar-filer..

> Dermed skal man altså - allerede når jar filen laves - kende den
> relative sti til f.eks. andre jar filer!? Det kunne jo give problemer
> hvis man udnytter nogle utility klasser el.lign. som man ikke lige ved
> hvor den aktuelle bruger har placeret (men så har man måske tabt?)

Nope, ikke relative stier, for jar filerne angivet i manifest filen,
skal ligge samme sted som den selv-kørende jar-fil.. Java "henter" så
jar-filen hvor den fandt en selv-kørende jar-fil..

--
Venlig hilsen

Frederik Hansen

Sun Certified Programmer
for the Java(tm) 2 Platform

email : frederik@roirex.dk
www : www.roirex.dk


Karl Peder Olesen (30-12-2002)
Kommentar
Fra : Karl Peder Olesen


Dato : 30-12-02 15:58

On Mon, 30 Dec 2002 10:08:30 +0100, Frederik Hansen
<nospam-thanks-frederik@roirex.dk> wrote:

>> Lige for at tjekke om jeg har forstået det ret: Vil det sige at den
>> eneste måde til at udnytte klasser uden for sin egen jar fil er at
>> specificere classpath i manifest filen?
>
>Ja, for selvkørende jar-filer..
>
>> Dermed skal man altså - allerede når jar filen laves - kende den
>> relative sti til f.eks. andre jar filer!? Det kunne jo give problemer
>> hvis man udnytter nogle utility klasser el.lign. som man ikke lige ved
>> hvor den aktuelle bruger har placeret (men så har man måske tabt?)
>
>Nope, ikke relative stier, for jar filerne angivet i manifest filen,
>skal ligge samme sted som den selv-kørende jar-fil.. Java "henter" så
>jar-filen hvor den fandt en selv-kørende jar-fil..
>
Tak for informationen - så blev jeg også klogere idag

mvh
Karl Peder



Stig Tanggaard (29-12-2002)
Kommentar
Fra : Stig Tanggaard


Dato : 29-12-02 17:26

Prøv lige at se på min løsning igen. Du skal ikke angive, at du vil køre en
class fra en jar, men bare putte den jar i din classpath. Og så køre din
main class.

altså
java -classpath <path-til-dine-jars-inklusiv-din-backup.jar>
navn-på-main-class-her

Uden nogen jar parametre eller lignende. Det virker helt sikkert. Hvis du
skulle være i tvivl <-klammerne skal IKKE med i din kommando. Og dine jars
skal være separeret med semikolon.

Stig

"Karl Peder Olesen" <kpo@mail1dotstofanetdotdk> skrev i en meddelelse
news:3e0ecba5.89762061@news.stofanet.dk...
> On Sat, 28 Dec 2002 22:27:54 +0100, "Stig Tanggaard"
> <stigth@stofanet.dk> wrote:
>
> >Prøv med
> >
> >java -classpath <pathtildinejars> mainclass
> >
> >stig
> >
> Jeg har nu prøvet med:
>
> java -classpath <path>\regexp.jar -jar backup.jar <parametre>
> java -classpath <path> -jar backup.jar <parametre>
> java -classpath .;<path> ......
> java -classpath .;<path>\regexp.jar ....
>
> ...hvor <path> er stien hvor regexp.jar befinder sig og <parametre> er
> de parametre, som backup programmet skal bruge. Men lige lidt hjælper
> det...
>
> Løsninger/løsningsforslag er derfor stadig meget meget velkomne.
>
> mvh
> Karl Peder
>
>



Karl Peder Olesen (30-12-2002)
Kommentar
Fra : Karl Peder Olesen


Dato : 30-12-02 00:22

On Sun, 29 Dec 2002 17:26:08 +0100, "Stig Tanggaard"
<stigth@stofanet.dk> wrote:

>Prøv lige at se på min løsning igen. Du skal ikke angive, at du vil køre en
>class fra en jar, men bare putte den jar i din classpath. Og så køre din
>main class.
>
>altså
>java -classpath <path-til-dine-jars-inklusiv-din-backup.jar>
>navn-på-main-class-her
>
<snip>

Ja, jeg fik det til at virke på den måde (jf. mit svar til Anders
tidligere i tråden)... Og det er jo herligt.

Tak for hjælpen.
mvh
Karl Peder


Søg
Reklame
Statistik
Spørgsmål : 177492
Tips : 31966
Nyheder : 719565
Indlæg : 6408466
Brugere : 218886

Månedens bedste
Årets bedste
Sidste års bedste