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:

  1. 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).
  2. tilläggsklasser: paket som finns i tilläggskatalogen för Java Runtime Environment eller JDK , jre/lib/ext/
  3. 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:

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