Java: Vart lägger man klasser som man...

Tråden skapades och har fått 11 svar. Det senaste inlägget skrevs .
1
  • Oregistrerad
  • 2002-11-06 17:21

Jag har en klass-fil som heter ConsoleInput.class som innehåller lite grejer som jag vill använda i flera små program som jag ska skriva. Vart ska jag lägga den filen för att kompilatorn ska hitta den när jag kompilerar?

Citat:

quote:Skapades ursprungligen av: Stephan H:
Jag har en klass-fil som heter ConsoleInput.class som innehåller lite grejer som jag vill använda i flera små program som jag ska skriva. Vart ska jag lägga den filen för att kompilatorn ska hitta den när jag kompilerar?

Du kan lägga den vad du vill.
Sen kan du antingen ställa dig i katalogen/mappen där filen ligger och sen bara skriva (i Terminal):

javac <filens namn>

står du i annan katalog så kan du skriva den relativa eller den absoluta sökvägen,
ex

javac /Users/Pelle/Javagrejs/minfil.java

tänk på att vid kompilering ange filnamn inkl ändelsen .java.

sen vid körning inte ange filändelsen (.class)
ex: java minfil

  • Oregistrerad
  • 2002-11-07 21:46

Jo, men filen är redan kompilerad så det behöver jag inte göra, och jag ska alltså använda funktioner i den kompilerade filen i program som jag skriver i framtiden. Och för att då slippa flytta filen till den katalogen som jag har de programmen jag ska kompilera, så ska det vad jag vet finnas en katalog som kompilatorn kollar i om den hittar den eftersökta klassen. Så att man i praktiken utökar javas "inbyggda funktioner", typ.

OK

missuppfattade dig lite.

om du skall förpacka programmet som jar-fil kan du inkludera den. (anges i manifestfilen)

annars lägg den i /Library/Java/Extensions/

  • Oregistrerad
  • 2002-11-08 17:46

Funkade inte det heller. Har testat det förut, men nu testade jag t.o.m. att starta om (vilket iofs inte borde vara nån skillnad tycker jag).

Det funkar som sagt om jag lägger class-filen som jag vill använda i samma katalog där jag kompilerar, så det är nog inget fel på filen.

  • Medlem
  • 2002-11-10 14:09

Borde fungera om du sätter upp miljövariabeln CLASSPATH till att peka ut biblioteket + filnamnet där filen ligger. Om jag t.ex har en class fil som heter minclass.class som ligger i /users/uhellstr/class så gör jag:

setenv CLASSPATH={$CLASSPATH}:/users/uhellstr/class/minclass.class

Detta för att java och javac skall hitta filen. Alternativt tror jag att java har en -d flagga för att ange alternativa pather.

/Ulf

  • Oregistrerad
  • 2002-11-10 18:36

Jag försökte sätta classpath till Extensions-mappen, men den gillade inte det:

[Xtephan:~] stephan% setenv CLASSPATH={$CLASSPATH}:/Library/Java/Extensions
CLASSPATH: Undefined variable.
[Xtephan:~] stephan%

Om jag bara skriver setenv så finns det inget som heter classpath.

What to do?

[ 10 November 2002, 18:38: Meddelandet ändrat av: Stephan H ]

Citat:

quote:Skapades ursprungligen av: Stephan H:
Jag försökte sätta classpath till Extensions-mappen, men den gillade inte det:

[Xtephan:~] stephan% setenv CLASSPATH={$CLASSPATH}:/Library/Java/Extensions
CLASSPATH: Undefined variable.
[Xtephan:~] stephan%

Om jag bara skriver setenv så finns det inget som heter classpath.

What to do?

Om classpath inte är satt kanske du borde pröva:

setenv CLASSPATH=~/Library/Java/Extensions

Om du använder $CLASSPATH så förutsätter det nog att classpath är satt till någonting (chansar vilt här)

Vet inte riktigt om det gör så att javac _bara_ letar just där eller om den letar på sina standardställen och sedan i classpathen men jag antar att det är det senare.

  • Medlem
  • 2002-11-11 22:58

>> Stephan

Ursäkta den lilla otydligheten

Om du gör:

setenv CLASSPATH {$CLASSPATH}:/<någonting>

så förutsätts att CLASSPATH redan är deklarerad
dvs att om du gör echo $CLASSPATH så finns den redan i annat fall gör du endast

setenv CLASSPATH <peka ut ett bibliotek>

Om du sedan behöver utöka CLASSPATH t.ex med ytterligare en katalog så gör du

setenv CLASSPATH {$CLASSPATH}:<ngt>

Ett litet enkelt exempel kanske förtydligar:

[Globens-dator:~] uhellstr% setenv X `pwd`
[Globens-dator:~] uhellstr% echo $X
/Users/uhellstr
[Globens-dator:~] uhellstr% setenv X {$X}:/usr/bin
[Globens-dator:~] uhellstr% echo $X
/Users/uhellstr:/usr/bin
[Globens-dator:~] uhellstr%

/Ulf

Nu har jag luskat och provat en del. (Installerade om för ett tag sen och inte jobbat med Javan på ett litet tag, så hade glömt).

1) Standard-mappen (enl Suns evangelium). i JDKn i lib/ext, som på OS X blir /System/Library/Frameworks/JavaVM.framework/Versions/CurrentJDK/Home/lib/ext

se Suns docs om extensions:

http://java.sun.com/j2se/1.3/docs/guide/extensions/index.html
hur att använda:
http://java.sun.com/docs/books/tutorial/ext/basics/install.html

denna mapp ägs av root så man måste sudo cp etc för att lägga nåt där. lite knöligt. dessutom kanske man glömmer bort det där

2) av Sun rek sätt nr 2:
ange classpathen vid körning ex java -cp /Users/pelle/Java/mittpaket.jar.Fördelen med detta är att man inte anropar fel objekt av samma namn (säg, man har två klasser i helt olika program som båda heter "Kund" och har identiska konstruktorer.) Det kan orsaka mkt förvirring. OM man har två såna som finns i olika mappar så kan effekten bli rätt mysko. *s*.
Om man har dem ingående i paket, så uppstår inte problemet. Såvida man inte importerar två paket med dylika likartade klasser...

forts.

"the Apple way"
3) lägg dem i de förinställda mapparna ("DefaultClasspath") : /Library/Java/, /System/Library/Java/, /Network/Library/Java/ eller ~/Library/Java.
de kan man se i filen /System/Library/Java/JavaConfig.plist (öppnas by default i Property List Editor, men det är en XML-fil som kan betraktas i en textredigerare också).

Enligt QA1170 (Technical Q&A på Apple Support) så säger den att man kan lägga dem i Extensionsmapparna. detta dokument ligger i /Developer/Documentation/Java/
Jag har provat de olika Extensions-mapparna. Där skall man lägga jar-filer. Lösa filer och paket som inte är jar-förpackade skall ligga i samma mapp som Extensions. alltså ex i /Library/Java/. INTE i Extension-mapparna. mappen ~/Library/Java finns inte automatiskt utan den får man göra själv. Jag lyckades inte få klasser/paket att funka i den, däremot ett paket i jar-form i ~/Library/Java/Extensions. Mysko...
hoppas jag inte uttrycker mig för suddigt (kl är halv ett och jag är rätt suddig :rolleyes: )

forts igen:

4)
lägg dem nån annanstans och sätt classpathen i loginskript (~/.tcshrc som nämnts. man kan också sätta den generellt i /etc/csh.cshrc eller /etc/cshlogin. men de filerna kanske man inte skall in och pilla i i onödan). Dessa filer läses av tcsh oxå.
Har inte provat att lägga in classpathen här, men lattjade med välkomst och ajö-meddelanden och det funkade (dvs pillade i onödan ).

iom att de förinställda mapparna (Extensions etc) finns så är det kanske onödigt att pula med classpathen på detta sätt. blir bara fler mappar att hålla reda på.

hoppas detta blev läsligt...

1
Bevaka tråden