Как менять ресурсы пакета на лету в среде bndtools/felix

Во время разработки нам нужно изменить содержимое определенного файла в пакете и иметь возможность видеть измененное содержимое файла в приложении без перекомпиляции / повторного объединения / переустановки пакета. Файл читается Bundle.getEntry() каждый раз, когда приложению требуется его содержимое.

С Eclipse PDE и Equinox это довольно просто, потому что фреймворк OSGi, запущенный из среды Eclipse, рассматривает папки проекта как распакованные пакеты. Изменения в файлах в папке проекта отражаются каждый раз, когда приложение считывает содержимое ресурса.

Если я правильно понимаю, bndtools всегда переупаковывает пакет при обнаружении изменения в ресурсе. Но для проекта с сотнями файлов ресурсов это занимает слишком много времени. Можно ли добиться такого же поведения, как в Eclipse PDE? Предпочтительно в Apache Felix? Такой функционал нам нужен только при разработке/отладке и только если приложение запускается из IDE. Ресурсы никогда не будут изменены в производстве.

Если быть точным - в нашем приложении много LESS-файлов, которые скомпилированы в несколько CSS. CSS генерируются сразу после изменения любого из файлов LESS. Это достигается с помощью gulp и node.js. Нам нужно видеть измененные файлы CSS (почти) сразу после перезагрузки страницы. Обратите внимание, что мы не используем службу HTTP OSGi.


person st33v3    schedule 26.07.2016    source источник


Ответы (2)


Нет, это невозможно.

Если упаковка Bndtools занимает слишком много времени, это может указывать на то, что ваш пакет слишком велик, и вам следует попытаться увеличить модульность.

person Neil Bartlett    schedule 26.07.2016
comment
Предположим, что мы перегруппируем наши пакеты, чтобы их упаковка занимала меньше времени. Тем не менее, есть ли возможность горячей замены пакета, т.е. работающее приложение будет получать доступ к измененным файлам без переустановки пакета? - person st33v3; 27.07.2016
comment
Если вы запускаете внутри Bndtools, то да, это значение по умолчанию. Пакеты обновляются в горячем режиме каждый раз, когда они меняются. - person Neil Bartlett; 27.07.2016

У меня есть несколько приложений, в которых я разрабатываю ресурсы в пакетах, и это работает нормально. (См. OSGi enRoute, в котором используется эта модель.) Пока пакеты не такие большие, они создаются менее чем за секунду. . Поэтому лучший совет — посмотреть, сможете ли вы разбить свой код/ресурсы на несколько модулей меньшего размера. Чем меньше, тем быстрее он строится.

Если это действительно проблема, и я бы расценил это как отчаянную попытку, вы, конечно, можете изменить код, который вызывает getEntry, чтобы он также смотрел на файловую систему. В режиме разработки (установленном через администратора конфигурации) вы можете получить его оттуда.

person Peter Kriens    schedule 01.08.2016