Стандартната Java платформа съдържа в себе голям списък от библиотеки за разработване на едно приложение. Едни от най – популярните библиотеки са:
- Collections API
- JDBC
- Swing/AWT
- I/O API
- STaX
Често обаче се случва, че предоставените възможности не са достатъчно и се налага да се използват допълнителните библиотеки, които не са част от платформата. В такъв случай тези външни библиотеки трябва да се добавят в CLASSPATH на Java платформата. CLASSPATH е начин да се каже на едно (Java) приложение къде да потърси за допълни библиотеки (jars). Такова описване на зависимости създава следните проблеми:
- нужните библиотеки са описани на ниво файлова система
- нужен е пълен или абсолютен път до файла
- няма ясно описание кои библиотеки са нужни
- ако библиотеките не са добавени в CLASSPATH то при стартиране на приложението ще се получи ClassNotFoundException. Намирането на всички нужни библиотеки може да е дълъг и тежък процес и изисква предварително да се знаят имената им.
- няма възможност за определяне на специфична версия на библиотеката
- дори имената на библиотеките да са предварително известни е нужно също да се знае версията на библиотеката, с която приложението работи. В противен случай може да се използва несъвместима версия на библиотеката
Java като платформа се използва за разработване на широк спектър от приложения – от малки мобилни приложения до сигурни сървърни приложения, способни да обработват милиони заявки в секунда. В същото време тя има описаните по – горе ограничения, които влияят на възможностите за модуларизация на едно приложение. Предоставените възможности за модуларизация са:
- интерфейси
- пакети
За да се постигне пълна модуларизация повечето компании или разработчици създават свои библиотеки и/или подходи. Такива техники са:
- правила за логическата структура на приложението
- различни трикове с classloaders
- сериализация на обектите за комуникация
Често обаче тези техники губят стойността си ако не се изпълняват стриктно и създават повече допълнителна работа отколкото помагат.
Възможностите, които липсват от Java платформата за да поддържа модуляризация са:
- модификатори на ниво jar
- възможност един jar да изброи своите зависимости
- няма версии
OSGI поддържа тези възможности като стъпва върху основата, която Java предлага и разширява възможностите й.