Bundle е най – малката модулна единица, с която може да се работи. Например „Hello, World!“ приложение ще се реализира като един bundle, който изписва „Hello, World!“ в конзолата, когато се пусне за първи път. Един bundle се състои от Java класове и други ресурси, които заедно преодоставят функционалност. Bundle-ите могат да споделят Java пакети помежду си. Bundle, който предоставя пакет се нарича exporter, а такъв, който използва предоставен пакет се нарича importer. Bundle-ите се пакетират като JAR файлове, които могат да бъдат инсталирани/деинсталирани/пускани/спирани в работещ OSGI, без това да изисква рестартиране на приложението.
Един bundle съдържа описание (метаинформация) за себе си във META-INF/MANIFEST.MF файл. Такава информация е:
- Името на класа, който стартира и спира дадения bundle.
-
Bundle-Activator: org.elsys-bg.sample.Activator
-
- Име на bundle-а, предназначено за крайния потребител.
-
Bundle-Name: Firewall
-
- Системно име на bundle-а
-
Bundle-SymbolicName: org.elsys-bg.sample
-
- Версия на bundle-а
-
Bundle-Version: 1.1
-
- Пакети, които предоставя
-
Export-Package: org.osgi.util.tracker;version=1.3
-
- Пакети, от които зависи
-
Import-Package: org.osgi.util.tracker,org.osgi.service.io;version=1.4
-
- Друг bundle, на който зависи
-
Require-Bundle: org.elsys-bg.examples
-
Bundle-SymbolicName и Bundle-Version трябва да идентифицират уникален bundle, т.е. не може да има два bundle-а, които имат еднакво име и версия.
Пълният списък от атрибути може да бъде намерен в OSGI спецификацията