|
| jar-fil problem Fra : Peter T. Nielsen |
Dato : 11-05-02 20:24 |
|
Hej!
Jeg har lavet et projekt med op til flere packages i og nu vi jeg gerne
have det hele samlet i en jar-fil.
Jeg har lavet jar filen med kommandoen: jar cvf navn.jar
Derefter compiler jeg et test eksempel med:
javac MainTest.java -classpath navn.jar:navn2.jar
hvor navn2.jar er en jar fil hentet på nettet. Det går
fint, men når jeg så vil køre test programmet med:
java MainTest -classpath navn.jar:navn2.jar
får jeg fejlen:
Exception in thread "main" java.lang.NoClassDefFoundError:
model/ComponentFactory
Jeg kan dog se at filen model/ComponentFactory.class ligger i den jar fil
jeg selv har lavet.
Nogen der kan se hvad jeg gør forkert? Testprogrammet køre selvfølgelig
fint hvis jeg bruge class filerne direkte!
Med tak for hjælpen
Peter
| |
Lars Dam (11-05-2002)
| Kommentar Fra : Lars Dam |
Dato : 11-05-02 21:25 |
|
On Sat, 11 May 2002 21:24:25 +0200, "Peter T. Nielsen"
<petni@image.dk> wrote:
>Hej!
>
>
>java MainTest -classpath navn.jar:navn2.jar
Prøv at bytte rundt på argumenterne, og brug semikolon istedet for
kolon:
java -classpath navn.jar;navn2.jar MainTest
>får jeg fejlen:
>Exception in thread "main" java.lang.NoClassDefFoundError:
>model/ComponentFactory
>
>Med tak for hjælpen
>Peter
vh. ld
| |
Thorbjørn Ravn Ander~ (11-05-2002)
| Kommentar Fra : Thorbjørn Ravn Ander~ |
Dato : 11-05-02 21:48 |
|
"Peter T. Nielsen" <petni@image.dk> writes:
> java MainTest -classpath navn.jar:navn2.jar
>
> får jeg fejlen:
> Exception in thread "main" java.lang.NoClassDefFoundError:
> model/ComponentFactory
>
> Jeg kan dog se at filen model/ComponentFactory.class ligger i den jar fil
> jeg selv har lavet.
Du har brugt Unix-syntaksen. Sidder du på en Windowsmaskine?
--
Thorbjørn Ravn Andersen
http://homepage.mac.com/ravn
| |
Lars Dam (11-05-2002)
| Kommentar Fra : Lars Dam |
Dato : 11-05-02 22:27 |
|
On 11 May 2002 22:48:05 +0200, thunderbear@bigfoot.com (Thorbjørn Ravn
Andersen) wrote:
>> får jeg fejlen:
>> Exception in thread "main" java.lang.NoClassDefFoundError:
>> model/ComponentFactory
>>
>> Jeg kan dog se at filen model/ComponentFactory.class ligger i den jar fil
>> jeg selv har lavet.
>
>Du har brugt Unix-syntaksen. Sidder du på en Windowsmaskine?
java's class loader/fil håndtering sørger for at /og \ er korrekte
(bliver mappet korrekt). Dvs. man behøver ikke tænke på dette i sin
(normale) programmering.
vh.ld
| |
Thorbjørn Ravn Ander~ (11-05-2002)
| Kommentar Fra : Thorbjørn Ravn Ander~ |
Dato : 11-05-02 22:58 |
|
Lars Dam <larsdamXXspamXXprotectionXX@post2.tele.dk> writes:
> >Du har brugt Unix-syntaksen. Sidder du på en Windowsmaskine?
>
> java's class loader/fil håndtering sørger for at /og \ er korrekte
> (bliver mappet korrekt). Dvs. man behøver ikke tænke på dette i sin
> (normale) programmering.
Korrekt. Men ";" og ":" har forskellig betydning på de to platforme i
CLASSPATH variablen.
--
Thorbjørn Ravn Andersen
http://homepage.mac.com/ravn
| |
Lars Dam (12-05-2002)
| Kommentar Fra : Lars Dam |
Dato : 12-05-02 08:31 |
|
On 11 May 2002 23:58:15 +0200, thunderbear@bigfoot.com (Thorbjørn Ravn
Andersen) wrote:
>Lars Dam <larsdamXXspamXXprotectionXX@post2.tele.dk> writes:
>
>
>Korrekt. Men ";" og ":" har forskellig betydning på de to platforme i
>CLASSPATH variablen.
Det er vist rigtigt nok; det er længe siden jeg har siddet på en unix boks.
Men det originale problem består i at manden sætter classpath op
_efter_ main klasse navnet - alle argumenter efter main klassen bliver
sendt videre til java applikationen og ikke til jvm'en.
vh. ld
| |
Thorbjørn Ravn Ander~ (12-05-2002)
| Kommentar Fra : Thorbjørn Ravn Ander~ |
Dato : 12-05-02 08:47 |
|
Lars Dam <larsdamXXspamXXprotectionXX@post2.tele.dk> writes:
> Men det originale problem består i at manden sætter classpath op
> _efter_ main klasse navnet - alle argumenter efter main klassen bliver
> sendt videre til java applikationen og ikke til jvm'en.
Den havde jeg misset. Jeg plejer normalt at have CLASSPATH sat op i
mine omgivelser, og sjaeldent direkte fra kommandolinien.
--
Thorbjørn Ravn Andersen
http://homepage.mac.com/ravn
| |
Peter T. Nielsen (12-05-2002)
| Kommentar Fra : Peter T. Nielsen |
Dato : 12-05-02 09:36 |
|
"Thorbjørn Ravn Andersen" wrote:
>
> "Peter T. Nielsen" <petni@image.dk> writes:
>
> > java MainTest -classpath navn.jar:navn2.jar
> >
> > får jeg fejlen:
> > Exception in thread "main" java.lang.NoClassDefFoundError:
> > model/ComponentFactory
> >
> > Jeg kan dog se at filen model/ComponentFactory.class ligger i den jar fil
> > jeg selv har lavet.
>
> Du har brugt Unix-syntaksen. Sidder du på en Windowsmaskine?
Jeg sider på en linux/unix maskine, men som I selv
har fundet ud af er det ikke kolonet der er
problemet. Hvis jeg skrive MainTest som det sidste
argument får jeg:
java -classpath bando.jar:../JMF2.1.1/lib/jmf.jar
MainTest
Exception in thread "main"
java.lang.NoClassDefFoundError: MainTest
MainTest class filerne ligger selvfølgelig i det
bibliotek jeg kører kommandoen fra! Desuden
hjælper det ikke at skrive hele stien til
MainTest.
Peter
| |
Peter T. Nielsen (12-05-2002)
| Kommentar Fra : Peter T. Nielsen |
Dato : 12-05-02 12:23 |
|
> java -classpath bando.jar:../JMF2.1.1/lib/jmf.jar
> MainTest
> Exception in thread "main"
> java.lang.NoClassDefFoundError: MainTest
Hvis man skriver:
java -classpath
bando.jar:../JMF2.1.1/lib/jmf.jar:./
virker det fint!
Jeg har dog stadig et problem. Jeg har nogle
billeder i projektet, og disse bliver ikke vist
når man kører det med jar filen. De ligge
selvfølgelig i jarfilen under den samme sti som
ved class filerne.
Skal man gøre noget specielt når det kommer til
billeder?
Peter
| |
Lars Dam (12-05-2002)
| Kommentar Fra : Lars Dam |
Dato : 12-05-02 17:02 |
|
On Sun, 12 May 2002 13:23:25 +0200, "Peter T. Nielsen"
<petani@daimi.au.dk> wrote:
>
>Jeg har dog stadig et problem. Jeg har nogle
>billeder i projektet, og disse bliver ikke vist
>når man kører det med jar filen. De ligge
>selvfølgelig i jarfilen under den samme sti som
>ved class filerne.
>
>Skal man gøre noget specielt når det kommer til
>billeder?
Ikke decideret kun billeder, men resourcer generelt som din
applikation har brug for (text filer, data filer o.l.). Overvej at
bruge følgende:
InputStream is =
this.getClass().getResourceAsStream(resourceName);
Den åbner en fil relativ til den class som 'this' er af på class
path'en. Dvs. det vil så fungere med både jar og directory strukturer.
>Peter
vh. ld
| |
Thorbjørn Ravn Ander~ (12-05-2002)
| Kommentar Fra : Thorbjørn Ravn Ander~ |
Dato : 12-05-02 12:49 |
|
"Peter T. Nielsen" <petani@daimi.au.dk> writes:
> Jeg sider på en linux/unix maskine, men som I selv
> har fundet ud af er det ikke kolonet der er
> problemet. Hvis jeg skrive MainTest som det sidste
> argument får jeg:
>
> java -classpath bando.jar:../JMF2.1.1/lib/jmf.jar
> MainTest
> Exception in thread "main"
> java.lang.NoClassDefFoundError: MainTest
Overvej at tilføje ":." til dit -classpath argumetn.
--
Thorbjørn Ravn Andersen
http://homepage.mac.com/ravn
| |
|
|