OSGi-buntmanifesttopptekst

Versjon 3.1 - Sist endret 20. juni, 2005

En bunt kan inneholde en beskrivelse av seg selv i manifestfilen som heter META-INF/MANIFEST.MF. Spesifikasjonen av OSGi R4-rammeverket definerer et sett med manifesttopptekster som for eksempel Export-Package og Bundle-Classpath, som buntutviklere bruker til å oppgi beskrivelser for en bunt. Eclipse OSGi-rammeverket implementerer den fullstendige spesifikasjonen av OSGi R4-rammeverket og alle tjenester for kjernerammeverket. Tjenestene for OSGi R4-kjernerammeverket inkluderer følgende:

Det er mange valgfrie tjenester definert i OSGi R4-spesifikasjonen. De valgfrie tjenestene er ikke inkludert i implementeringen av Eclipse OSGi-rammeverket. Du finner informasjon om OSGi R4-manifesttopptekster og tjenester under OSGi-spesifikasjoner.

Eclipse-buntmanifesttopptekster

Eclipse OSGi-rammeverket støtter en rekke ekstra buntmanifesttopptekster og direktiver. En buntutvikler kan bruke disse ekstra topptekstene og direktivene for å utnytte noen tilleggsfunksjoner i Eclipse OSGi-rammeverket som ikke er oppgitt som del av et standard OSGi R4-rammeverk.

Ekstra Export-Package-direktiver

Eclipse OSGi-rammeverket støtter ekstra direktiver i toppteksten Export-Package. Disse direktivene blir brukt til å oppgi tilgangsbegrensningsreglene for en eksportert pakke. Se osgi.resolverMode hvis du vil konfigurere Eclipse OSGi-rammeverket slik at det tvinger gjennom tilgangsbegrensningsreglene under kjøring.

Direktivet x-internal

Direktivet x-internal kan brukes i en Export-Package-topptekst for å oppgi om pakken er en intern pakke. PDE (Plug-in Development Environment) vil fraråde andre bunter å bruke en intern pakke. Hvis x-internal-direktivet ikke er oppgitt, blir standardverdien 'false' (usann) brukt. Direktivet x-internal må ha følgende syntaks:

x-internal ::= ( 'true' | 'false' )

Nedenfor finner du et eksempel på x-internal-direktivet.

Export-Package: org.eclipse.foo.internal; x-internal:=true

Direktivet x-friends

Direktivet x-friends kan brukes i en Export-Package-topptekst for å oppgi en liste over bunter som har tilgang til pakken. PDE (Plug-in Development Environment) vil fraråde andre bunter å bruke pakken. Direktivet x-friends må ha følgende syntaks:

x-friends ::= '"' ( target-bundle ) ( ',' target-bundle ) * '"'
target-bundle ::= et symbolsk navn for bunten

Nedenfor finner du et eksempel på x-friends-direktivet.

Export-Package: org.eclipse.foo.formyfriends; x-friends:="org.eclipse.foo.friend1, org.eclipse.foo.friend2"

Eksempelet oppgir at bare buntene org.eclipse.foo.friend1 og org.eclipse.foo.friend2 skal oppmuntres til å bruke pakken org.eclipse.foo.formyfriends. Pakken x-internal har høyere prioritet enn x-friends-direktivet. Hvis x-internal-direktivet oppgir 'true' (sann), vil PDE (Plug-in Development Environment) fraråde alle bunter å bruke pakken, selv om de er oppgitt som en venn (friend).

Toppteksten Eclipse-LazyStart

Toppteksten Eclipse-LazyStart blir brukt til å oppgi om en bunt skal startes automatisk før det gis tilgang til den første klassen eller ressursen fra den bunten. Denne funksjonen gjør at Eclipse kan aktivere bunter når det blir bedt om det, første gangen de trengs. Ved hjelp av denne modellen kan Eclipse starte med så få aktive bunter som mulig. Toppteksten Eclipse-LazyStart må ha følgende syntaks:

Eclipse-LazyStart ::= ( 'true' | 'false' ) ( ';' 'exceptions' '=' '"' exceptions-list '"' ) ?
exceptions-list ::= en liste over pakker skilt med komma ','

Attributtet 'exceptions' blir brukt til å oppgi en liste over pakker som ikke skal få bunten til å bli aktivert når det blir lastet inn klasser eller ressurser fra dem. Hvis toppteksten Eclipse-LazyStart ikke er definert i buntmanifestet, blir standardverdien 'false' brukt. Her er et eksempel på toppteksten Eclipse-LazyStart:

Eclipse-LazyStart: true; exceptions="org.eclipse.foo1, org.eclipse.foo2"

Eksempelet oppgir at denne bunten må aktiveres for alle klasser eller ressurser som blir lastet inn fra denne bunten, bortsett fra klassene og ressursene i pakken 'org.eclipse.foo1' og 'org.eclipse.foo2'.

Toppteksten Eclipse-AutoStart er foreldet i Eclipse 3.2. Eclipse-LazyStart bør brukes i stedet.

Toppteksten Eclipse-PlatformFilter

Eclipse-PlatformFilter blir brukt til å oppgi et plattformfilter for en bunt. Et plattformfilter må evalueres som true (sann) i en plattform som kjøres, for at en bunt skal kunne behandles. Toppteksten Eclipse-PlatformFilter må ha følgende syntaks:

Eclipse-PlatformFilter ::= en gyldig LDAP-filterstreng

Rammeverket støtter filtrering for følgende systemegenskaper:

Nedenfor finner du et eksempel på Eclipse-PlatformFilter-toppteksten.

Eclipse-PlatformFilter: (& (osgi.ws=win32) (osgi.os=win32) (osgi.arch=x86))

Dette eksempelt oppgir at denne bunten bare kan behandles hvis plattformegenskapene er osgi.ws=win32 og osgi.os=win32 og osgi.arch=x86. Med andre ord en plattform som kjøres på en x86-arkitektur med et win32-operativsystem og win32-vindussystemet.

Toppteksten Eclipse-BuddyPolicy

Toppteksten Eclipse-BuddyPolicy blir brukt til å oppgi policyene for buddy-klasseinnlasting for en bunt. Toppteksten Eclipse-BuddyPolicy må ha følgende syntaks:

Eclipse-BuddyPolicy ::= ( policy-name ) ( ',' policy-name ) *
policy-name ::= ( 'dependent' | 'global' | 'registered' | 
                  'app' | 'ext' | 'boot' | 'parent' )

Nedenfor finner du et eksempel på Eclipse-BuddyPolicy-toppteksten.

Eclipse-BuddyPolicy: dependent

Toppteksten Eclipse-RegisterBuddy

Toppteksten Eclipse-RegisterBuddy blir brukt til å oppgi en liste over bunter som denne bunten er en registrert buddy for. Toppteksten Eclipse-RegisterBuddy må ha følgende syntaks:

Eclipse-RegisterBuddy ::= ( target-bundle ) ( ',' target-bundle ) *
target-bundle ::= et symbolsk navn for bunten

Nedenfor finner du et eksempel på Eclipse-RegisterBuddy-toppteksten.

Eclipse-RegisterBuddy: org.eclipse.foo.bundle1, org.eclipse.foo.bundle2

Toppteksten Eclipse-ExtensibleAPI

Eclipse-ExtensibleAPI blir brukt til å oppgi om en vertsbunt tillater at fragmentbunter legger til ekstra API til verten. Denne toppteksten skal brukes hvis en vertsbunt ønsker å tillate at fragmenter legger til ekstra pakker i APIet til verten. Hvis denne toppteksten ikke er oppgitt, blir standardverdien 'false' (usann) brukt. Eclipse-ExtensibleAPI må ha følgende syntaks:

Eclipse-ExtensibleAPI ::= ( 'true' | 'false' )

Nedenfor finner du et eksempel på Eclipse-ExtensibleAPI-toppteksten.

Eclipse-ExtensibleAPI: true

Toppteksten Eclipse-GenericCapabilty

Toppteksten Eclipse-GenericCapability brukes til å oppgi generisk funksjonalitet for en bunt. Generisk funksjonalitet kan brukes til å beskrive funksjoner i bunten som kan trengs av andre bunter i systemet (som bruker toppteksten Eclipse-GenericRequire). Generisk funksjonalitet gis et navn og en funksjonalitetstype. Funksjonalitetstyper defineres ved bunten som tilbyr funksjonaliteten. Funksjonalitet kan også ha et sett med skrevne samsvarende attributter som samsvar måles mot ved tolkning av Eclipse-GenericRequire-topptekster. Samsvarende attributter kan være av en av følgende typer: [string | version | uri | long | double | set]. Settypen kan brukes til å definere et sett med strenger som en kommaskilt liste med strenger. Toppteksten Eclipse-GenericCapability må ha følgende syntaks:

  Eclipse-GenericCapability ::= capability ( ',' capability ) *
  capability                ::= typed-name ( ';' typed-name ) * 
                                ( ';' typed-param ) *
  typed-name                ::= name ( ':' capability-type )
  typed-param               ::= typed-key '=' quouted-string
  typed-key                 ::= name ( ':' 
                                [string | version | uri | long | double | set] )

Her er et eksempel på toppteksten Eclipse-GenericCapabilty som kan brukes til å spesifisere et bunt med en OSGi-tjenestes org.acme.stuff.SomeService-implementering:

  Eclipse-GenericCapability: 
   org.acme.stuff.SomeService:osgi.service; 
   version:version="1.0.1"

Toppteksten Eclipse-GenericRequire

Toppteksten Eclipse-GenericRequire brukes til å spesifisere et krav på en generisk funksjonalitet som tilbys av en annen bunt (ved hjelp av toppteksten Eclipse-GenericCapability). Generiske krav gis et navn og en funksjonalitetstype. Funksjonalitetstyper defineres ved bunten som tilbyr funksjonaliteten. Generiske krav kan spesifisere en LDAP-filterstreng som brukes som valgfilter for å tolkes mot samsvarende generisk funksjonalitet. Toppteksten Eclipse-GenericRequire må ha følgende syntaks:

  Eclipse-GenericRequire   ::= generic-require ( ',' generic-require ) *
  generic-require          ::= typed-name ( ';' typed-name ) *
                               ( ';' selection-filter '=' quoated-ldapFilter )
                               ( ';' optional '=' [true|false] )
                               ( ';' multiple '=' [true|false] )
  typed-name                ::= name ( ':' capability-type )

Her er et eksempel på toppteksten Eclipse-GenericRequire som kan brukes til å spesifisere en bunt som avhenger av en OSGi-tjenestes org.acme.stuff.SomeService implementering:

  Eclipse-GenericRequire: 
   org.acme.stuff.SomeService:osgi.service; 
   selection-filter="(version>=1.0.1)"

Generiske aliaser

Alternativet osgi.genericAliases kan brukes til å tilordne eksisterende OSGi-manifesttopptekster til Eclipse-GenericCapability- og Eclipse-GenericRequire-manifesttopptekster. Ta for eksempel følgende manifesttopptekster:

  Export-Service: org.acme.stuff.SomeService
  Import-Service: org.acme.stuff.SomeService

Disse topptekstene kan tilordnes til topptekstene Eclipse-GenericCapability og Eclipse-GenericRequire ved hjelp av følgende egenskap:

  osgi.genericAliases=Export-Service:Import-Service:osgi.service

Dette kan oversettes til følgende generiske topptekster:

  Eclipse-GenericRequire: org.acme.stuff.SomeService:osgi.service
  Eclipse-GenericCapability: org.acme.stuff.SomeService:osgi.service

Toppteksten Plugin-Class

Plugin-Class-toppteksten blir bare brukt til å støtte plugin-moduler utviklet for Eclipse 2.1-plattformen. Denne toppteksten brukes til å spesifisere et klassenavn som skal brukes til å aktivere en plugin-modul ved hjelp av den gamle Eclipse 2.1-aktiveringsmodellen. Nye bunter som er utviklet for Eclipse 3.0 eller nyere plattformer, bør ikke bruke denne toppteksten. Nedenfor finner du et eksempel på Plugin-Class-toppteksten.

Plugin-Class: org.eclipse.foo.FooPlugin