У меня есть пакет, который работает в основном с интерфейсами, и он использует фабрику из партии 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 импортировать пакеты, даже если мы не будем использовать их явно?
Нет, это не так, как импорт работает в OSGi. Импорт - это импорт, нет опции «force». Невозможно сказать, что на самом деле происходит неправильно в вашем примере, потому что никаких манифестах нет. –
Ну, у меня нет образца, но могу сказать, что pom.xml имеет пакет import для определенного пакета, но манифест не потому, что пакет явно не использовался в коде. –
Если манифест не импортирует пакет, пакет не импортируется. Период. Как манифест оказался таким? Кто знает. Это проблема сборки, поэтому вам нужно будет подробно рассказать о системе сборки. –