Klassväg
Classpath är en parameter i Java Virtual Machine eller Java-kompilatorn som anger platsen för användardefinierade klasser och paket . Parametern kan ställas in antingen på kommandoraden eller genom en miljövariabel .
Översikt och arkitektur
I likhet med det klassiska dynamiska laddningsbeteendet , när Java- program körs, hittar och laddar Java Virtual Machine klasser lätt (den laddar bytekoden för en klass först när klassen används första gången). Klasssökvägen talar om för Java var man ska leta i filsystemet efter filer som definierar dessa klasser.
Den virtuella maskinen söker efter och laddar klasser i denna ordning:
- bootstrap-klasser: de klasser som är grundläggande för Java-plattformen (som omfattar de offentliga klasserna i Java Class Library och de privata klasserna som är nödvändiga för att detta bibliotek ska fungera).
- tilläggsklasser: paket som finns i tilläggskatalogen för Java Runtime Environment eller JDK ,
jre/lib/ext/
- användardefinierade paket och bibliotek
Som standard är endast paketen för JDK standard API och tilläggspaket tillgängliga utan att behöva ange var de ska hittas. Sökvägen för alla användardefinierade paket och bibliotek måste ställas in på kommandoraden (eller i manifestet som är kopplat till Jar-filen som innehåller klasserna).
Ställer in sökvägen för att köra Java-program
Leverans som applikationsargument
Anta att vi har ett paket som heter org.mypackage som innehåller klasserna:
- HelloWorld (huvudklass)
- SupportClass
- UtilClass
och filerna som definierar detta paket lagras fysiskt under katalogen D:\myprogram (på Windows ) eller /home/user/myprogram (på Linux ).
Filstrukturen ser ut så här:
Microsoft Windows | Linux |
---|---|
D:\mittprogram\ | ---> org\ | ---> mitt paket\ | ---> HelloWorld.class ---> SupportClass.class ---> UtilClass.class |
/hem/användare/mittprogram/ | ---> org/ | ---> mitt paket/ | ---> HelloWorld.class ---> SupportClass.class ---> UtilClass.class |
När vi anropar Java anger vi namnet på programmet som ska köras: org.mypackage.HelloWorld. Men vi måste också tala om för Java var man ska leta efter filerna och katalogerna som definierar vårt paket. Så för att starta programmet använder vi följande kommando:
Microsoft Windows | Linux |
---|---|
java -classpath D:\mittprogram org.mypackage.HelloWorld |
java -cp /home/user/myprogram org.mypackage.HelloWorld |
var:
-
java
är Java runtime launcher, en typ av SDK-verktyg (ett kommandoradsverktyg, som javac , javadoc eller apt ) - -classpath D:\myprogram ställer in sökvägen till paketen som används i programmet (på Linux, -cp /home/user/myprogram ) och
- org.mypackage.HelloWorld är namnet på huvudklassen
Ange vägen genom en miljövariabel
Miljövariabeln med namnet CLASSPATH
kan alternativt användas för att ställa in klasssökvägen . För exemplet ovan kan vi också använda på Windows:
D:\mittprogram> set CLASSPATH = D:\mittprogram D:\mittprogram> java org.mypackage.HelloWorld
Regeln är att alternativet -classpath
, när det används för att starta java-applikationen, åsidosätter miljövariabeln CLASSPATH .
Om ingen anges används den aktuella arbetskatalogen som klasssökväg. Detta betyder att när vår arbetskatalog är D:\myprogram\
(på Linux, /home/user/myprogram/
), skulle vi inte behöva ange klasssökvägen explicit. Vid åsidosättning rekommenderas det dock att inkludera den aktuella mappen ". "
in i klasssökvägen i det fall då laddning av klasser från aktuell mapp önskas.
Detsamma gäller inte bara java launcher utan även javac , java kompilatorn.
Ställa in sökvägen till en Jar-fil
Om ett program använder ett stödjande bibliotek inneslutet i en Jar-fil som heter supportLib.jar , fysiskt placerad i katalogen D:\myprogram\lib\ och motsvarande fysiska filstruktur är:
D:\mittprogram\ | ---> lib\ | ---> supportLib.jar | ---> org\ | --> mitt paket\ | ---> HelloWorld.class ---> SupportClass.class ---> UtilClass.class
följande kommandoradsalternativ behövs:
java -classpath D:\mittprogram;D:\mittprogram\lib\supportLib.jar org.mypackage.HelloWorld
eller alternativt:
D:\mittprogram> set CLASSPATH = D:\mittprogram;D:\mittprogram\lib\supportLib.jar D:\mittprogram> java org.mypackage.HelloWorld
Lägga till alla JAR-filer i en katalog
I Java 6 och högre kan man lägga till alla jar-filer i en specifik katalog till klasssökvägen med hjälp av jokertecken.
Windows exempel:
D:\myprogram> java -classpath ".;c:\mylib\*" MyApp
Linux exempel:
$ java -classpath '.:/mylib/*' MyApp
Detta fungerar för både -classpath-
alternativ och miljöklassvägar.
Ställer in sökvägen i en manifestfil
Om ett program har inneslutits i en Jar-fil som heter helloWorld.jar , som finns direkt i katalogen D:\myprogram , är katalogstrukturen följande:
D:\mittprogram\ | ---> helloWorld.jar | ---> lib\ | ---> supportLib.jar
Manifestfilen som definieras i helloWorld.jar har denna definition:
Main-Class : org.mypackage.HelloWorld Class-Path : lib/supportLib.jar
Manifestfilen ska avslutas med antingen en ny rad eller vagnretur .
Programmet startas med följande kommando:
java -jar D:\mittprogram\helloWorld.jar [appargument]
Detta startar automatiskt org.mypackage.HelloWorld specificerad i klassen Main-Class med argumenten. Användaren kan inte ersätta detta klassnamn med anropet java -jar
. Class-Path beskriver platsen för supportLib.jar i förhållande till platsen för biblioteket helloWorld.jar . Varken absolut filsökväg, som är tillåten i -classpath
-parametern på kommandoraden, eller jar-interna sökvägar stöds. Detta betyder att om huvudklassfilen finns i en jar, org/mypackage/HelloWorld.class vara en giltig sökväg på roten i jarret.
Flera klassvägsposter separeras med mellanslag:
Class-Path : lib/supportLib.jar lib/supportLib2.jar
OS-specifika anteckningar
Eftersom syntaxen är nära associerad med filsystemet, beror kommandoradens syntax för Classpath på operativsystemet. Till exempel:
- på alla Unix-liknande operativsystem (som Linux och Mac OS X ) har katalogstrukturen en Unix-syntax, med separata filsökvägar separerade med ett kolon (":").
- på Windows har katalogstrukturen en Windows-syntax, och varje filsökväg måste separeras med semikolon ( ";").
Detta gäller inte när klasssökvägen är definierad i manifestfiler , där varje filsökväg måste separeras med ett mellanslag (" "), oavsett operativsystem.
Se även
externa länkar
- Notera som förklarar hur Java-klasser hittas, på Oracles webbplats
- Specifikation av hur man ställer in Classpath på Oracle-webbplatsen