Avatar billede martin_schou Nybegynder
27. september 2001 - 11:45 Der er 16 kommentarer og
2 løsninger

Java og Jar-filer

Minder om http://www.eksperten.dk/spm/105545, men i modsætning til forfatteren af ovenstående spørgsmål, så er jeg villig til at afslutte spørgsmålet :-)

Uden at have lavet en jar-fil kører jeg programmet således, når jeg står i roden af hierakiet:
java Pakke1.Pakke2.Klasse

Jeg har lavet en manifest-fil med følgende indhold:
Main-Class: Pakke1.Pakke2.Klasse


Derefter har jeg kørt
jar cvfm Jarpakke.jar manifext.txt *.*

Hvis jeg nu skriver
java Jarpakke
får jeg følgende meddelelse
Exception in thread \"main\" java.lang.NoClassDefFoundError: Jarpakke

hvis jeg skriver
java Jarpakke.jar
får jeg følgende meddelelse
Exception in thread \"main\" java.lang.NoClassDefFoundError: Jarpakke/jar

Hvordan fanden får jeg lortet til at virke ordentligt???
Avatar billede carstenknudsen Nybegynder
27. september 2001 - 12:00 #1
Din jar fil skal ligge i classpath\'en. For at køre
dit program skal udføre kommandoen:

java -classpath ./Jarpakke.jar:$CLASSPATH Pakke1.Pakke2.Klasse

(under Unix; under Windows skal du skrive %CLASSPATH%
og benytte \\ i stedet for /)
Det er ikke nok at classpath\'en indeholder det direktorienavn
hvor jar filen ligger, navnet skal eksplicit indgå i din classpath.
Avatar billede martin_schou Nybegynder
27. september 2001 - 12:09 #2
Venter lige lidt med at acceptere svaret, for jeg vil lige vide lidt mere.

Windows kan sættes til at starte .jar-filer, som var de .exe-filer. For at de skal virke, hvordan gør jeg så lige det?

Og kan du ikke lige minde mig om, hvad det er classpath er? Er sgu noget længe siden, jeg har brugt det ... hehe
Avatar billede erikjacobsen Ekspert
27. september 2001 - 12:13 #3
Du mener vel ikke
jar cvfm Jarpakke.jar manifext.txt *.*
men
jar cvfm Jarpakke.jar manifest.txt *.*
Avatar billede martin_schou Nybegynder
27. september 2001 - 12:16 #4
uhm ... det ved jeg ikke helt erik ... hvad er forskellen?
Avatar billede disky Nybegynder
27. september 2001 - 12:17 #5
istedet for
java Jarpakke.jar

skriv

java -cp . Jarpakke.jar

For at includere current directory til classpath


Avatar billede martin_schou Nybegynder
27. september 2001 - 12:27 #6
c>java -cp . Jarpakke.jar
Exception in thread \"main\" java.lang.NoClassDefFoundError: Jarpakke/jar

Avatar billede erikjacobsen Ekspert
27. september 2001 - 12:36 #7
Forskellen? Filen skal vel hedde manifest.txt
Avatar billede martin_schou Nybegynder
27. september 2001 - 12:42 #8
Erik: Kig lige lidt nærmere på det, du har skrevet:
\"Du mener vel ikke
jar cvfm Jarpakke.jar manifext.txt *.*
men
jar cvfm Jarpakke.jar manifest.txt *.*  \"

jar cvfm Jarpakke.jar manifext.txt *.* (1. linje)
jar cvfm Jarpakke.jar manifest.txt *.* (2. linje)
jar cvfm Jarpakke.jar manifext.txt *.* (min)

hvad er lige forskellen på de tre?
Avatar billede disky Nybegynder
27. september 2001 - 12:44 #9
du skriver manifext.txt
han skriver manifest.txt

du har brugt et \'x\' i fest istedet for et \'s\'
Avatar billede carstenknudsen Nybegynder
27. september 2001 - 12:47 #10
Ang. CLASSPATH:
Classpath\'en fortæller java hvor den skal lede
efter dine klasser og jar filer;  java ved udmærket
godt hvor standard klasserne (java.lang, java.io, ... )
ligger.  Hvis du skal have fat i klasser der ligger
i et direktorie skal du bare have direktorie navnet
ind i classpath\'en, men for jar filer skal navnet på
jar filen også være med (som beskrevet ovenfor).
Anatomien af en classpath variable er altså
(jeg prøver at skrive det på Windows\'k):
CLASSPATH=%CLASSPATH%;c:\\my\\classes;c:\\my\\dir\\fil.jar
første element sørger for at inkludere hvad classpath\'en allerede
var sat op til, andet element sørger for at klasser der ligger
i c:\\my\\classes kan findes og endelig sørger c:\\my\\dir\\fil.jar
for at fil.jar filen også genkendes.
Ang. Svar fra disky
Det er nødvendigt at inkludere navnet på jar filer
i classpath\'en, som beskrevet i mit tidligere indlæg.
Avatar billede disky Nybegynder
27. september 2001 - 12:48 #11
carsten: selvfølgelig, du har helt ret, sorry
Avatar billede erikjacobsen Ekspert
27. september 2001 - 12:55 #12
og så skal du vel også skrive

  java -jar jarfil.jar
Avatar billede carstenknudsen Nybegynder
27. september 2001 - 13:00 #13
Ang. erikjacobsen
En jar fil kan indeholde hundrevis af programmer
og de kan alle eksekveres ved at angive deres navn.
I så fald vil man ikke benytte -jar flaget.
Avatar billede martin_schou Nybegynder
27. september 2001 - 13:01 #14
Jeg må ydmygt undskylde overfor Erik ... det her stel med glas, jeg har til at sidde på ansigtet, er vist ikke til meget hjælp ...

Carsten: Vil det sige, at jeg IKKE kan lave min .jar-fil således, at den kan ligge et vilkårligt sted, på en vilkårlig maskine, og blot kan startes ved at skrive \"java Jarfil(.jar)\" eller at dobbeltklikke på filen i explorer (windows)?

Pointen i en .jar-fil er vel netop det \'simple\' i dens brug, at man ikke skal huske 27 forskellige variabler og indstillinger.
Avatar billede carstenknudsen Nybegynder
27. september 2001 - 13:18 #15
Ang. kommentar fra martin_schou:
Pointen med jar filer er at de kan indeholde en
hulens masse.  Nogle af de ting jeg arbejder
med benytter jar filer til at gemme måske 50 applikationer
der enten kan køre som \"stand-alone\" applikationer,
eller benyttes af andre applikationer.  I det tilfælde er
det ikke hensigtsmæssigt at bruge \"java -jar ...\" idet du
så kun kan have et program i en jar fil.  Hvis du dog har
et konkret problem med et enkelt program kan du tilføje
en Main-Class attribut til jar filen og den kan så køres
direkte med \"java -jar ...\" 
Du kan selvfølgelig have din jar fil liggende på et vilkårligt
sted (men ikke på en vilkårlig maskine) og kan uden
tvivl få den eksekveret med et tryk på en ikon.  Jeg
ville nok lave en simpel \".bat\" fil der starter java programmet
op, men jeg er ikke Windows ekspert.
Ang. din sidste pointe har du heller ikke brug for 27 forskellige
indstillinger, du skal blot huske hvad navnet er på dit
program, så kan du sætte din CLASSPATH variabel
til at indeholde jar filen (sikker i en autoexec.bat fil
eller hvad man nu gør under Windows).
Avatar billede martin_schou Nybegynder
27. september 2001 - 13:30 #16
Jeg er ikke kommet specielt meget videre, men jeg har fået svar på det, jeg bad om.
Avatar billede martin_schou Nybegynder
28. september 2001 - 09:40 #17
Fandt ud af mit problem.

Jeg havde kopieret mine .class-filer fra det originale bibliotek til et kaldet Compiled, hvilket medførte at alle mine sti-navne i jar-filen hed Compiled/...

Fandt ud af at Forte For Java kan lave jar-filerne for mig, og tilføje en manifest fil uden problemer. Yay.
Avatar billede disky Nybegynder
28. september 2001 - 09:41 #18
udemærket :)
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