|
| 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
| |
|
|