Avatar billede brinkoman Nybegynder
16. november 2002 - 16:24 Der er 27 kommentarer og
3 løsninger

At putte filer i CLASSPATH

Jeg har downloaded nogle java-beans fra internettet som jeg skal bruge i et program jeg er ved at udvikle.

På manden der har lavet de beans' hjemmeside står der at man bare skal putte jar-filen ind i classpath, og så er det installeret!

MEN HVORDAN FANDEN GØR MAN DET?

Jeg har prøvet med alt muligt, fx:
java -classpath jarfil.jar
java -cp jarfil.jar

jeg ved ikke om det er det man skal bruge, men HVER gang kommer der en exception:
Exception in thread "main" java.lang.NoClassDefFoundError: jarfil/jar:

Håber nogen jan hjælpe...
Avatar billede gybel Nybegynder
16. november 2002 - 16:27 #1
Java beans skal ligge i samme bibliotek som dine servlets.
Her efter skal du sætte classpath'en
Hvilket os benytter du??
Avatar billede gybel Nybegynder
16. november 2002 - 16:29 #2
ellers kan du altid ligge filer ind i mappen der hedder C:\j2sdk1.4.0\jre\lib\ext hvis du ønsker at benytte nogle klasser fra en jar fil eller andet.
Avatar billede brinkoman Nybegynder
16. november 2002 - 16:30 #3
det forstår jeg ikke.

Der står på hjemmesiden at man bare skal smide jar-filerne ind i classpath.

Jeg har indtil videre forstået det sådan at jar-filerne er pakker, ligesom javax.swing osv.og at jeg så kan bruge programmerne i mine egne programmer ved at skrive import program.fra.internet.*;

Jeg bruger Mandrake Linux 8.2
Avatar billede brinkoman Nybegynder
16. november 2002 - 16:32 #4
det andet lyder interessant

Det var også det første jeg tænkte, altså at man lægger jar-filerne ind i en mappe som java leder i for at finde pakker.

Prøver lige...
Avatar billede gybel Nybegynder
16. november 2002 - 16:34 #5
ok i dit java udviklings kit ligger der en mappe der hedder "jre" den har en undermappe der hedder "lib" og den har en undermappe der hedder "ext"
Hvis du kopier jar filen der i så behøver du ikke at sætte classpath'en fordi den er sat til det bibliotek.
Avatar billede gybel Nybegynder
16. november 2002 - 16:35 #6
ext er til ekstra jar filer :o)
Avatar billede carstenknudsen Nybegynder
16. november 2002 - 16:45 #7
Du skal bare inkludere jar filen som herunder,
og huske at du så skal angive navnet på dit program,
det er manglen på sidstnævnte der giver dig problemer:
java -cp .;c:\path\to\jar/jarfil.jar DitProgramNavn
(under windows; under unix brug : i stedet for ;).
Avatar billede arne_v Ekspert
16. november 2002 - 17:29 #8
Jeg vil absolut fraråde dig at begynde at smide
fremmede jar-filer ind i jre\lib\ext - det blander
ting sammen som ikke har noget med hinanden at gøre.

Hvis du har downloaded jarfil.jar og skal bruge den
i dit Java program JavaFil.java, så compiler du med:

javac -classpath jarfil.jar JavaFil.java

og kører med:

java -classpath jarfil.jar JavaFil

(hvis jarfil.jar skal bruges af flere programmer, så
ligger du den i et separat directory og angiver sti
i classpath'en)
Avatar billede brinkoman Nybegynder
16. november 2002 - 18:05 #9
Jeg har prøvet det der med at ligge filen i ext, men det virker ikke umiddelbart!

Det sidste du nævner Arne V, er det jeg skal bruge.

Men hvordan angiver jeg stien i classpath... og hvis det bare bliver compilet hvor jeg i javafil har import pakke.*; så skal jeg vel ikke køre programmet på nogen speciel måde
Avatar billede arne_v Ekspert
16. november 2002 - 18:16 #10
Jo.

En import sætning betyder kun, at du kan udelade
pakke-navnet i din kode.

Du skal stadigvæk have den i classpath.

javac -classpath C:\wherever\jarfil.jar JavaFil.java
java -classpath C:\wherever\jarfil.jar JavaFil
Avatar billede arne_v Ekspert
16. november 2002 - 18:17 #11
Hovsa - brug

-classpath C:\wherever\jarfil.jar;.

(så den også kan finde dine egne filer=
Avatar billede brinkoman Nybegynder
16. november 2002 - 18:22 #12
det fatter jeg ikke. det kan da ikke passe at man skal køre programmet på en bestemt måde bare fordi man har fået en ny pakke.

Så vidt jeg ved kan man også selv lave en pakke. Og kan man ikke få dem til at være en pakke ligesom alt andet, fx javax.swing.*; uden at skulle compile og køre på nogen specielle måder hver eneste gang??? Altså man udvider bare javas bibliotek med egne programmer. Det må sku da kunne lade sig gøre, ellers har jeg svært ved at se det fornuftige i Objekt orienteret programmering...

Det er sikkert bare mig der ikke har forstået nogetsomhelst...
Avatar billede gybel Nybegynder
16. november 2002 - 18:32 #13
det som arne_v siger er at du skal stille dig i det bibliotek hvor din java fil ligger.
Her skriver du først
javac -classpath (stien til din jar fil);. (navnet på din java fil).java
java -classpath (stien til din jar fil);. (navnet på din java fil)

. betyder at du sætter classpath'en til det aktuelle bibliotek.
Det er rigtig at det er bedre rent struktur mæssigt  at gøre det sådan.
Avatar billede gybel Nybegynder
16. november 2002 - 18:38 #14
Alle pakker skal have sat en classpath.
Hvis du sætter classpath'en fast til et bibliotek hvor du har alle dine pakker,klasser,jar filer så behøver du ikke at compile sådan.

export JDK_HOME=/usr/j2sdk1.4.1_01 (din sti)
export JAVA_HOME=/usr/j2sdk1.4.1_01
export PATH=$PATH:$JAVA_HOME/bin
export CLASSPATH=$JAVA_HOME/lib;.;+(dine andre stier)
Avatar billede gybel Nybegynder
16. november 2002 - 18:38 #15
andre stier skal være der hvor din jar fil ligger!
Avatar billede brinkoman Nybegynder
16. november 2002 - 18:41 #16
ok

hvordan sætter jeg classpath fast til et bibliotek?

og hvad skal jeg så gøre i mit program? Kan jeg så bare bruge Minpakke.MinKlasse eller hvad?
Avatar billede gybel Nybegynder
16. november 2002 - 18:45 #17
i Linux se oven over!
jeg mener godt at man kan sætte ekstra stier på som udfor classpath, men er ikke sikker.
Avatar billede arne_v Ekspert
16. november 2002 - 18:47 #18
Du skal altid have en classpath til det som
dit program bruger.

Og hvis det selv er noget som du har lavet.

Og det har ikke noget med object orienteret eller
ej at gøre. Det vedrører source coden. Det her
er hvordan du kører tingene.

Og ja - du er ikke den første som synes at Java er lidt
tung at danse med p.g.a. classpath.

Men du vender dig til det.
Avatar billede arne_v Ekspert
16. november 2002 - 18:50 #19
På Windows sætter du environment variabel CLASSPATH.

Du kan enten sætte den:

set CLASSPATH=C:\dir\fil.jar;%CLASSPATH%

i en BAT-fil.

Eller du kan sætte den ind generelt i CLASSPATH.

AUTOEXEC i Win95/Win98/WinME. "Control Panel" "System" "Advanced"
"Environment Variables" i WinNT/Win2K/WinXP.
Avatar billede gybel Nybegynder
16. november 2002 - 18:51 #20
btw der er : der er adskillelses tegn som arne_v skrev.
Avatar billede arne_v Ekspert
16. november 2002 - 18:52 #21
Man bruger : som adskillelse på Unix og ; som adskillelse
på Windows.
Avatar billede brinkoman Nybegynder
16. november 2002 - 18:55 #22
Nu har jeg skrevet:

export CLASSPATH=$JAVA_HOME/lib:./minjarfil.jar

og nu siger den ingenting. Det vil vel sige at der er sket noget!

Men hvordan bruger jeg så pakken i mine programmer?
Avatar billede arne_v Ekspert
16. november 2002 - 18:57 #23
Det står der forhåbentlig noget om i den
medfølgende dokumentation !
Avatar billede brinkoman Nybegynder
16. november 2002 - 19:00 #24
Jeg tror ikke det er det jeg mener...

altså, hvis man har tilføjet en jar fil til classpath, hvordan kan man så bruge de klasser der ligger i denne? Bare ligesom man ville bruge fx javax.swing.JPanel; ??
Avatar billede arne_v Ekspert
16. november 2002 - 19:06 #25
Fuldstændigt.

Når de er i classpathen, så kan javac og java finde
koden.

Og så kan du bruge den.

pakke.klasse

eller

import pakke;

klasse
Avatar billede brinkoman Nybegynder
16. november 2002 - 19:10 #26
Det lyder godt, men jeg kan ikke få det til at virke.

Jeg har smidt jar filen jcalender i classpath.

I den ligger der et mappe-hieraki. com/toedter/calender/ <-og her ligger class filerne så

hvad skal jeg så bruge?

com.toedter.calender.JCalender kalender = new com.toedter.calender.JCalender  ????
Avatar billede arne_v Ekspert
16. november 2002 - 19:12 #27
Ja, eller hvad der nok er mere praktisk:

import com.toedter.calender.JCalender;

JCalender kalender = new JCalender();
Avatar billede brinkoman Nybegynder
16. november 2002 - 19:18 #28
ok, det virker bare ikke :-(

Jeg skriver
javac -classpath jcalender.jar MinKalender.java

så siger den at pakken com.toedter.calender ikke eksisterer. Er det noget jeg har skrevet forkert, eller er det pakken der er forkert lavet eller noget?
Avatar billede arne_v Ekspert
16. november 2002 - 19:33 #29
Du kan checke indholdet af jcalendar.jar med:

jar tvf jcalendar.jar
Avatar billede brinkoman Nybegynder
15. januar 2003 - 09:11 #30
Jeg fik det aldrig til at virke...
Der må have været noget galt. Men nu har jeg Debian og bruger NetBeans, og der kan den selv finde ud af at putte jar-filer osv. i classpath...
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester