Definer Java-byggebane

Her beskrives det hvordan du definerer Java-byggebanen.  Byggebanen er klassebanen som brukes til å bygge et Java-prosjekt (IJavaProject).

En klassebane er rett og slett en matrise med klassebaneoppføringer (IClassPathEntry) som beskriver de typene som er tilgjengelige.  Typene kan forekomme i kilde- eller binærform, og rekkefølgen av oppføringer i banen definerer oppslagsrekkefølgen for å behandle typer under en bygging.

Java-byggebanen gjenspeiles i strukturen til et Java-prosjektelement.  Du kan spørre et prosjekt etter dets pakkefragmentrøtter (IPackageFragmentRoot). Hver klassebaneoppføring tilordnes til en eller flere pakkefragmentrøtter, som hver inneholder et sett med pakkefragmenter.

Denne diskusjonen av byggebanen omfatter ikke Java-kjøretidsbanen, som kan defineres atskilt fra byggebanen.  (Kjøretidsklassebanen diskuteres i Kjøre Java-kode.)

Endre byggebanen

Du kan programmatisk endre et prosjekts byggebane med setRawClasspath på tilsvarende prosjekts Java-element. Følgende kode definerer klassebanen for en prosjektressurs:

	IProject project = ... // hent en prosjektressurs
	IJavaProject javaProject = JavaCore.create(project);
	IClasspathEntry[] newClasspath = ...;
	javaProject.setRawClasspath(newClasspath, someProgressMonitor);
	

(Merk:  Bruk av uttrykket "raw" for klassebanen er for å understreke at variabler som brukes til å beskrive oppføringsplasseringer, ikke er tolket.)

Java-byggebanen fortsetter inn i en fil kalt '.classpath' i prosjektets filstruktur. Formålet med denne filen er å være en måte å dele Java-byggebaneinnstillinger med andre på gjennom et kildekodelager.Denne filen bør ikke redigeres manuelt, siden den kan bli ødelagt.

Klassebaneoppføringer

Klassebaneoppføringer kan defineres med factory-metodene definert på JavaCore.  Klassebaneoppføringer kan referere til hvilke som helst av følgende:

Eksklusjonsmønstre

En klassebanekildeoppføring kan tildeles et eksklusjonsmønster, som hindrer visse ressurser i en kildemappe i å være synlige på klassebanen. Ved hjelp av et mønster kan gitte deler av ressurstreet filtreres ut.  Hvert eksklusjonsmønster er relativt i forhold til klassebaneoppføringen, og bruker en mønstermekanisme som likner på Ant.  Eksklusjonsmønstre kan brukes til å angi nestede kildemapper så lenge det ytre mønsteret utelater det indre mønsteret.

Du finner flere opplysninger om eksklusjonsmønstre i getExclusionPatterns.

Java-prosjektets API isOnClasspath kontrollerer både inklusjons- og eksklusjonsmønstre før det avgjøres om en bestemt ressurs er i klassebanen.

Merknader:

Inklusjonsmønstre

En klassebanekildeoppføring kan tildeles et inklusjonsmønster, som eksplisitt definerer ressurser som synlige på klassebanen.  Når ingen inklusjonsmønstre er spesifisert, inkluderer kildeoppføringen alle relevante filer i ressurstreet med rot i denne kildens oppføringsbane. Hvis ett eller flere inklusjonsmønstre spesifiseres, kan bare de spesifiserte delene av ressurstreet inkluderes.Hver bane som spesifiseres, må være en relativ bane, og vil bli tolket i forhold til denne kildens oppføringsbane.Det skilles mellom små og store bokstaver i filmønstre.En fil som samsvarer med ett eller flere av disse mønstrene, inkluderes i tilsvarende pakkefragmentrot, med mindre den ekskluderes av et eller flere av denne oppføringens eksklusjonsmønstre.

Du finner en diskusjon av syntaksen og semantikken til banemønstre i getExclusionPatterns. Fravær av inklusjonsmønstre er semantisk likt med det eksplisitte inklusjonsmønsteret **.

Java-prosjektets API isOnClasspath kontrollerer både inklusjons- og eksklusjonsmønstre før det avgjøres om en bestemt ressurs er i klassebanen.

Eksempler:

Klassebanetolkning

Siden klassebanevariabler og -containere gjør at du kan definere dynamisk bundne klassebaneoppføringer, skiller klassebane-APIet mellom en ubehandlet (rå) og en behandlet (tolket) klassebane.   Den rå klassebanen er den som opprinnelig er definert for Java-prosjektet med setRawClasspath, og kan spørres videre på ved at man spør prosjektet om getRawClasspath.  Den tolkede klassebanen kan man spørre på med getResolvedClasspath. Denne operasjonen utløser initialisering av alle variabler og containere som er nødvendige for å tolke klassebanen. Mange Java-modelloperasjoner gjør implisitt at Java-byggebanen tolkes.  For eksempel krever beregning av et prosjekts pakkefragmentrøtter at byggebanen tolkes.