Упражнението има за цел да покаже различните видове зависимости между bundle-и и как може да се постигне различна функционалност само чрез промяна на конфигурация на приложението.
- Създайте нов bundle с име CommandsAPI
- От менюто File изберете New->Project…
- От появилият се прозорец изберете Plug-In Project и натиснете Next
- За Project Name въведете CommandsAPI
- Уверете се, че за Target Platform е избрано an OSGI framework
- Натиснете Next
- От следващата страница изключете Generate an activator, a Java class that controls the plug-in’s life cycle и натиснете Next
- От следващата страница изключете Create a plug-in using one of the templates
- Натиснете Finish
- В новосъздадения bundle (CommandsAPI) направете нов пакет с име org.elsys.modular.command
- Натиснете десния бутон на мишката върху src директорията от проекта и изберете New->Package
- В новосъздадения пакет (org.elsys.modular.command) създайте нов интерфейс с име Command
- Натиснете десния бутон на мишката върху org.elsys.modular.command пакета и изберете New->Interface
- Добавете метод – void execute(); – в интерфейса
-
package org.elsys.modular.command; public interface Command { void execute(); }
-
- Създайте нов bundle с име HelloWorldCommand (стъпки 1А – 1H)
- В новосъздадения bundle (HelloWorldCommand) направете нов пакет с име org.elsys.modular.hello
- В новосъздадения пакет (org.elsys.modular.hello) създайте нов клас с име HelloWorldCommand
- Натиснете десния бутон на мишката върху org.elsys.modular.hello пакета и изберете New->Class
- В отворилия се прозорец въведете HelloWorldCommand за име на класа и се уверете, че създаването на public static void main(String[] args) е изключено
- Направете HelloWorldCommand да имплементира Command
-
package org.elsys.modular.hello; public class HelloWorldCommand implements Command { }
-
- Следната грешка трябва да се появи – Command cannot be resolved to a type. Bunlde HelloWorldCommand използва интерфейс дефиниран в CommandsAPI. Тази зависимост може да бъде решена по следния начин:
- Bundle CommandsAPI трябва да export-не пакетите, съдържащи интерфейсите, които се използват от други bundle-и. В случая org.elsys.modular.command
- Bundle HelloWorldCommand трябва да import-не този пакет за да достъпи интерфейса дефиниран в него. Освен import-package зависимости могат да бъдат решени и с require-bundle – по този начин обаче се специфицира точно определен bundle като зависимост. При import-package се специфицира пакет, а bundle-ът, който го предоставя не е строго определен.