Εκδοχή 3.1 - Τελευταία αναθεώρηση στις 20 Ιουνίου 2005
Οι δέσμες μεταφέρουν περιγραφικές πληροφορίες σχετικά με τον εαυτό τους στο αρχείο δήλωσης που ονομάζεται META-INF/MANIFEST.MF. Οι προδιαγραφές του πλαισίου OSGi R4 ορίζουν ένα σύνολο κεφαλίδων δήλωσης, όπως Export-Package και Bundle-Classpath, τις οποίες χρησιμοποιούν οι προγραμματιστές δέσμης για να δώσουν περιγραφικές πληροφορίες για μια δέσμη. Το πλαίσιο OSGi του Eclipse υλοποιεί πλήρως τις προδιαγραφές του πλαισίου OSGi R4 και όλες τις υπηρεσίες του πλαισίου πυρήνα. Οι υπηρεσίες του πλαισίου πυρήνα OSGi R4 περιλαμβάνουν τα εξής:
Στις προδιαγραφές του OSGi R4 ορίζονται διάφορες προαιρετικές υπηρεσίες. Οι προαιρετικές υπηρεσίες δεν περιλαμβάνονται στην υλοποίηση του πλαισίου OSGi του Eclipse. Για πληροφορίες σχετικά με τις κεφαλίδες δήλωσης και τις υπηρεσίες OSGi R4, ανατρέξτε στις προδιαγραφές του OSGi.
Το πλαίσιο OSGi του Eclipse υποστηρίζει διάφορες πρόσθετες κεφαλίδες και οδηγίες δήλωσης. Ένας προγραμματιστής δέσμης μπορεί να χρησιμοποιήσει αυτές τις πρόσθετες κεφαλίδες και οδηγίες για να επωφεληθεί από ορισμένες πρόσθετες λειτουργίες του πλαισίου OSGi του Eclipse, οι οποίες δεν καθορίζονται ως μέρος ενός τυπικού πλαισίου OSGi R4.
Το πλαίσιο OSGi του Eclipse υποστηρίζει πρόσθετες οδηγίες για την κεφαλίδα Export-Package. Οι οδηγίες αυτές χρησιμοποιούνται για τον καθορισμό των κανόνων περιορισμού πρόσβασης για ένα πακέτο που έχει εξαχθεί. Δείτε το osgi.resolverMode για να ρυθμίσετε το πλαίσιο OSGi του Eclipse, ώστε να εφαρμόζει υποχρεωτικά τους κανόνες περιορισμού πρόσβασης στο περιβάλλον εκτέλεσης.
Η οδηγία x-internal μπορεί να χρησιμοποιηθεί σε μια κεφαλίδα Export-Package για να καθοριστεί αν το πακέτο είναι εσωτερικό πακέτο. Το περιβάλλον ανάπτυξης πρόσθετων λειτουργιών θα αποτρέψει τη χρήση εσωτερικών πακέτων από άλλες δέσμες. Αν δεν καθοριστεί οδηγία x-internal, τότε χρησιμοποιείται η προεπιλεγμένη τιμή "false". Στην οδηγία x-internal πρέπει να ακολουθείται η εξής σύνταξη:
x-internal ::= ( 'true' | 'false' )
Ακολουθεί ένα παράδειγμα της οδηγίας x-internal:
Export-Package: org.eclipse.foo.internal; x-internal:=true
Η οδηγία x-friends μπορεί να χρησιμοποιηθεί σε μια κεφαλίδα Export-Package για να καθορίσει μια λίστα με δέσμες για τις οποίες επιτρέπεται η πρόσβαση στο πακέτο. Το περιβάλλον ανάπτυξης πρόσθετων λειτουργιών θα αποτρέψει τη χρήση του πακέτου από άλλες δέσμες. Στην οδηγία x-friends πρέπει να ακολουθείται η εξής σύνταξη:
x-friends ::= '"' ( target-bundle ) ( ',' target-bundle ) * '"' target-bundle ::= ένα συμβολικό όνομα δέσμης
Ακολουθεί ένα παράδειγμα της οδηγίας x-friends:
Export-Package: org.eclipse.foo.formyfriends; x-friends:="org.eclipse.foo.friend1, org.eclipse.foo.friend2"
Σύμφωνα με το παράδειγμα, η χρήση του πακέτου org.eclipse.foo.formyfriends πρέπει να συνιστάται μόνο στις δέσμες org.eclipse.foo.friend1 και org.eclipse.foo.friend2. Το πακέτο x-internal έχει προτεραιότητα έναντι της οδηγίας x-friends. Όταν η οδηγία x-internal ορίζει τιμή "true", το περιβάλλον ανάπτυξης πρόσθετων λειτουργιών δεν θα συνιστά σε καμία δέσμη να χρησιμοποιήσει το πακέτο, ακόμα και στην περίπτωση που οι δέσμες ορίζονται ως φιλικά στοιχεία.
Η κεφαλίδα Eclipse-LazyStart χρησιμοποιείται για να καθορίσει αν μια δέσμη πρέπει να εκκινείται αυτόματα πριν εκτελεστεί πρόσβαση στην πρώτη κλάση ή πόρο από τη συγκεκριμένη δέσμη. Αυτή η λειτουργία επιτρέπει στο Eclipse να εκτελεί αργή ενεργοποίηση των δεσμών την πρώτη φορά που οι δέσμες αυτές χρειάζονται. Με τη χρήση αυτού του μοντέλου, η εκκίνηση του Eclipse μπορεί να γίνει με τις λιγότερες δυνατές ενεργές δέσμες. Η κεφαλίδα Eclipse-LazyStart πρέπει να χρησιμοποιεί την ακόλουθη σύνταξη:
Eclipse-LazyStart ::= ( 'true' | 'false' ) ( ';' 'exceptions' '=' '"' exceptions-list '"' ) ? exceptions-list ::= μια λίστα πακέτων διαχωρισμένων με κόμμα ','
Το γνώρισμα "exceptions" χρησιμοποιείται για να καθοριστεί μια λίστα με πακέτα που δεν πρέπει να προκαλέσουν την ενεργοποίηση της δέσμης, όταν γίνεται φόρτωση κλάσεων ή πόρων από αυτά. Αν η κεφαλίδα Eclipse-LazyStart δεν ορίζεται στη δήλωση δέσμης, τότε χρησιμοποιείται η προεπιλεγμένη τιμή "false". Ακολουθεί ένα παράδειγμα της κεφαλίδας Eclipse-LazyStart:
Eclipse-LazyStart: true; exceptions="org.eclipse.foo1, org.eclipse.foo2"
Σύμφωνα με το παράδειγμα, αυτή η δέσμη πρέπει να ενεργοποιηθεί για οποιαδήποτε κλάση ή πόρο φορτώνεται από αυτήν, εκτός από τις κλάσεις και τους πόρους στα πακέτα "org.eclipse.foo1" και "org.eclipse.foo2".
Η κεφαλίδα Eclipse-AutoStart έχει καταργηθεί στο Eclipse 3.2. Αντί αυτής, θα πρέπει να χρησιμοποιείται η κεφαλίδα Eclipse-LazyStart.
Η κεφαλίδα Eclipse-PlatformFilter χρησιμοποιείται για τον καθορισμό ενός φίλτρου πλατφόρμας για μια δέσμη. Τα φίλτρα πλατφόρμας πρέπει να έχουν τιμή "true" σε μια πλατφόρμα που εκτελείται, ώστε να επιτρέπεται η ανάλυση σε μια δέσμη. Η κεφαλίδα Eclipse-PlatformFilter πρέπει να χρησιμοποιεί την ακόλουθη σύνταξη:
Eclipse-PlatformFilter ::= μια έγκυρη σειρά χαρακτήρων φίλτρου LDAP
Το πλαίσιο υποστηρίζει τη χρήση φίλτρων για τις ακόλουθες ιδιότητες συστήματος:
Ακολουθεί ένα παράδειγμα της κεφαλίδας Eclipse-PlatformFilter:
Eclipse-PlatformFilter: (& (osgi.ws=win32) (osgi.os=win32) (osgi.arch=x86))
Σύμφωνα με το παραπάνω παράδειγμα, αυτή η δέσμη μπορεί να αναλυθεί μόνο αν οι ιδιότητες της πλατφόρμας είναι osgi.ws=win32 και osgi.os=win32 και osgi.arch=x86. Με άλλα λόγια, μια πλατφόρμα που εκτελείται σε αρχιτεκτονική x86 χρησιμοποιώντας λειτουργικό σύστημα win32 και το σύστημα παραθύρων win32.
Η κεφαλίδα Eclipse-BuddyPolicy χρησιμοποιείται για να καθοριστούν για μια δέσμη οι πολιτικές που αφορούν τη φόρτωση κλάσεων τρίτου κατασκευαστή. Η κεφαλίδα Eclipse-BuddyPolicy πρέπει να χρησιμοποιεί την ακόλουθη σύνταξη:
Eclipse-BuddyPolicy ::= ( policy-name ) ( ',' policy-name ) * policy-name ::= ( 'dependent' | 'global' | 'registered' | 'app' | 'ext' | 'boot' | 'parent' )
Ακολουθεί ένα παράδειγμα της κεφαλίδας Eclipse-BuddyPolicy:
Eclipse-BuddyPolicy: dependent
Η κεφαλίδα Eclipse-RegisterBuddy χρησιμοποιείται για να καθορίσει μια λίστα με δέσμες για τις οποίες αυτή η δέσμη είναι ένας καταχωρημένος τρίτος κατασκευαστής. Η κεφαλίδα Eclipse-RegisterBuddy πρέπει να χρησιμοποιεί την ακόλουθη σύνταξη:
Eclipse-RegisterBuddy ::= ( target-bundle ) ( ',' target-bundle ) * target-bundle ::= ένα συμβολικό όνομα δέσμης
Ακολουθεί ένα παράδειγμα της κεφαλίδας Eclipse-RegisterBuddy:
Eclipse-RegisterBuddy: org.eclipse.foo.bundle1, org.eclipse.foo.bundle2
Το Eclipse-ExtensibleAPI χρησιμοποιείται για να καθορίσει αν μια δέσμη υπολογιστή επιτρέπει στις δέσμες τμημάτων κώδικα να προσθέσουν κι άλλο API στον υπολογιστή. Αυτή η δέσμη πρέπει να χρησιμοποιείται αν μια δέσμη υπολογιστή θέλει να επιτρέψει σε τμήματα κώδικα την προσθήκη κι άλλων πακέτων στο API του υπολογιστή. Αν δεν καθοριστεί αυτή η κεφαλίδα, τότε χρησιμοποιείται η προεπιλεγμένη τιμή "false". Η κεφαλίδα Eclipse-ExtensibleAPI πρέπει να χρησιμοποιεί την ακόλουθη σύνταξη:
Eclipse-ExtensibleAPI ::= ( 'true' | 'false' )
Ακολουθεί ένα παράδειγμα της κεφαλίδας Eclipse-ExtensibleAPI:
Eclipse-ExtensibleAPI: true
Η κεφαλίδα Eclipse-GenericCapability χρησιμοποιείται για να προσδιορίσει μια γενική δυνατότητα μιας δέσμης. Οι γενικές δυνατότητες μπορούν να χρησιμοποιηθούν για την περιγραφή λειτουργιών της δέσμης σας, οι οποίες μπορεί να απαιτούνται από άλλες δέσμες στο σύστημα (μέσω της χρήσης της κεφαλίδας Eclipse-GenericRequire). Στις γενικές δυνατότητες δίνεται ένα όνομα και ένα είδος δυνατότητας. Τα είδη δυνατότητας ορίζονται από τη δέσμη που προσφέρει τη δυνατότητα. Οι δυνατότητες μπορούν επίσης να έχουν ένα σύνολο τυποποιημένων, σύμφωνων γνωρισμάτων που χρησιμοποιούνται ως γνωρίσματα αντιπαραβολής όταν αναλύονται κεφαλίδες Eclipse-GenericRequire. Τα σύμφωνα γνωρίσματα μπορεί να ανήκουν στα ακόλουθα είδη: [string | version | uri | long | double | set]. Το είδος του συνόλου μπορεί να χρησιμοποιηθεί για να ορίσει το σύνολο των σειρών χαρακτήρων ως μια λίστα σειρών χαρακτήρων που διαχωρίζονται με κόμμα. Η κεφαλίδα Eclipse-GenericCapability πρέπει να χρησιμοποιεί την ακόλουθη σύνταξη:
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] )
Ακολουθεί ένα παράδειγμα της κεφαλίδας Eclipse-GenericCapabilty που θα μπορούσε να χρησιμοποιηθεί για τον ορισμό μιας δέσμης με υλοποίηση της υπηρεσίας OSGi org.acme.stuff.SomeService:
Eclipse-GenericCapability: org.acme.stuff.SomeService:osgi.service; version:version="1.0.1"
Η κεφαλίδα Eclipse-GenericRequire χρησιμοποιείται για τον ορισμό μιας απαίτησης σε μια γενική δυνατότητα που προσφέρεται από άλλη δέσμη (μέσω της χρήσης της κεφαλίδας Eclipse-GenericCapability). Στις γενικές απαιτήσεις δίνεται ένα όνομα και ένα είδος δυνατότητας. Τα είδη δυνατότητας ορίζονται από τη δέσμη που προσφέρει τη δυνατότητα. Οι γενικές απαιτήσεις μπορούν να ορίσουν μια σειρά χαρακτήρων φίλτρου LDAP, η οποία χρησιμοποιείται ως φίλτρο επιλογής για την επίλυση του προβλήματος επιλογής ανάμεσα σε γενικές δυνατότητες που μοιάζουν. Η κεφαλίδα Eclipse-GenericRequire πρέπει να χρησιμοποιήσει την ακόλουθη σύνταξη:
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 )
Ακολουθεί ένα παράδειγμα της κεφαλίδας Eclipse-GenericRequire που θα μπορούσε να χρησιμοποιηθεί για να ορίσει μια δέσμη, η οποία εξαρτάται από μια υλοποίηση της υπηρεσίας OSGi org.acme.stuff.SomeService:
Eclipse-GenericRequire: org.acme.stuff.SomeService:osgi.service; selection-filter="(version>=1.0.1)"
Η επιλογή osgi.genericAliases μπορεί να χρησιμοποιηθεί για την αντιστοίχιση υπαρχουσών κεφαλίδων δήλωσης OSGi στις κεφαλίδες δήλωσης Eclipse-GenericCapability και Eclipse-GenericRequire. Για παράδειγμα, δείτε τις ακόλουθες κεφαλίδες δήλωσης:
Export-Service: org.acme.stuff.SomeService Import-Service: org.acme.stuff.SomeService
Οι κεφαλίδες αυτές αντιστοιχίζονται στις κεφαλίδες Eclipse-GenericCapability και Eclipse-GenericRequire μέσω της χρήσης της ακόλουθης ιδιότητας:
osgi.genericAliases=Export-Service:Import-Service:osgi.service
Αφανώς, η ιδιότητα αυτή θα μεταφραστεί στις ακόλουθες γενικές κεφαλίδες:
Eclipse-GenericRequire: org.acme.stuff.SomeService:osgi.service Eclipse-GenericCapability: org.acme.stuff.SomeService:osgi.service
Η κεφαλίδα Plugin-Class χρησιμοποιείται μόνο για την υποστήριξη πρόσθετων λειτουργιών που έχουν αναπτυχθεί για την πλατφόρμα Eclipse 2.1. Αυτή η κεφαλίδα χρησιμοποιείται για να καθορίσει ένα όνομα κλάσης που θα χρησιμοποιηθεί για την ενεργοποίηση μιας πρόσθετης λειτουργίας μέσω του παλιού μοντέλου ενεργοποίησης του Eclipse 2.1. Η συγκεκριμένη κεφαλίδα δεν πρέπει να χρησιμοποιείται από τις νέες δέσμες που αναπτύχθηκαν για την πλατφόρμα Eclipse 3.0 ή για άλλη, μεταγενέστερη έκδοση. Ακολουθεί ένα παράδειγμα της κεφαλίδας Plugin-Class:
Plugin-Class: org.eclipse.foo.FooPlugin