2015-04-24 2 views
0

У меня есть пакет, который работает в основном с интерфейсами, и он использует фабрику из партии thrid party, чтобы получить экземпляры для интерфейсов, которые он использует. Например,Force Imports в Apache Karaf

мой-bundle.jar имеет ...

com.oth.itf.Intrface itf = Fctry.getInstance('ABC'); 

имеет

imports-package for com.oth.itf 

третьего-party.jar есть ..

public static com.oth.itf.Intrface getInstance(String abc) { 
    if (...) { 
     return new com.oth.impl.ItfInstance(); 
    } 
} 

имеет exports-package for com.oth.itf and com.oth.impl

Все работает отлично и пучки также получить развернутый, но проблема в том, что я получаю

ClassNotFoundException для ItfInstance

на

мой -bundle

при выполнении кода.

Я попробовал добавить импорт-пакет для com.oth.impl, но безрезультатно. Вещи начали работать, когда я добавил

фиктивную декларацию com.oth.impl.ItfInstance

некоторые, где в моем-bundle.jar. Похоже, Karaf получает импорт, только если мы их явно используем. Есть ли способ лучше? Есть ли способ заставить Karaf импортировать пакеты, даже если мы не будем использовать их явно?

+0

Нет, это не так, как импорт работает в OSGi. Импорт - это импорт, нет опции «force». Невозможно сказать, что на самом деле происходит неправильно в вашем примере, потому что никаких манифестах нет. –

+0

Ну, у меня нет образца, но могу сказать, что pom.xml имеет пакет import для определенного пакета, но манифест не потому, что пакет явно не использовался в коде. –

+0

Если манифест не импортирует пакет, пакет не импортируется. Период. Как манифест оказался таким? Кто знает. Это проблема сборки, поэтому вам нужно будет подробно рассказать о системе сборки. –

ответ

0

Нейл прав, если он не используется в коде, его нельзя импортировать. С Karaf у вас есть возможность помочь. С помощью команды bundle: dynamic-import вы можете добавить динамический импорт в комплект поставки во время выполнения. С этим вы сможете найти нужный импорт через bundle: headers вы найдете импортированные пакеты этого пакета. Возьмите их и добавьте те недостающие импорты в ваше явное поколение и ваш набор.

0

Если вы не имеете свертка: варианта, использует этот Dev: Команды:

dev:dynamic-import <BundleID> 

Это позволяет зависимости Karaf импорта во время выполнения.

Смежные вопросы