Как заменить панель запуска BndTools по умолчанию и изменить структуру файла экспорта
Я использую BndTools ( http://bndtools.org/) для разработки приложения OSGI. Все работает нормально, но у меня есть кое-что, что я хотел бы изменить при экспорте моего приложения.
Я пытаюсь достичь двух вещей (я думаю, что они могут быть связаны):
1: заменить панель запуска BndTools по умолчанию (aQute.launcher
) с пользовательским (или иметь его в .JAR
формат)
Как я могу избавиться или изменить средство запуска BndTools по умолчанию (aQute.launcher) на пользовательское?
Единственное, что я мог узнать по этой теме, здесь: http://goo.gl/jYliih
Пусковые установки не встроены в bnd, фактическая стратегия запуска параметризована. Модуль запуска связан с файлом bnd или bndrun путем помещения JAR-файла в
-runpath
,.JAR
должен иметь заголовок Launcher-Plugin, чтобы быть средством запуска. Если на-runpath
тогда встроенныйbiz.aQute.launcher
будет использоваться.
Причина в том, что мне нужно, чтобы мое приложение принимало командные аргументы и не мешало командам запуска aQute (как и все аргументы -run). С другой стороны, я хотел бы избавиться от партии .bat/.sh
подход запуска приложения и использования одного .jar
файл для запуска приложения.
Это возможно?
2: настроить структуру экспортируемого файла
По умолчанию BndTools создает эту файловую структуру при экспорте приложения:
jar/
-> Это папка с OSGI
aQute/
-> Стандартный BndTools Launcher (Launcher.class внутри)
META-INF/
-> Почему здесь есть папка META-INF? Это не баночка
launcher.properties
-> Свойства запуска
start.sh
-> Запускает Launcher.class из этих пакетных файлов.
start.bat
/ Где это преимущество по сравнению с JAR?
В основном я хотел бы удалить aQute
, META-INF
а также start.*
файлы и добавить bin
папка для бинарных файлов.
Этого можно добиться с помощью сценария "Муравей", "Maven" или "Gridle". Но я могу просто создать "Проект BndTools" или "Проект Gradle" без поддержки BndTools. Я установил "Плагин BndTools Gradle", но нигде не смог найти никакой полезной документации по этой теме.
Надеюсь, что кто-то может помочь мне или указать мне правильное направление с этим. Привет.
1 ответ
(Этот вопрос также задавался в списке групп bndtools)
Я немного сбит с толку, так как желания, которые вы, кажется, оправдали. Вы можете экспортировать файл bndrun в один исполняемый файл JAR. В программе bndtools вы можете получить доступ к аргументам командной строки, получив службу объекта, а затем свойство службы "launcher.arguments". Это оригинальная строка [], предоставленная основному методу модуля запуска.
@Reference(target=“(launcher.arguments=*)”)
void setArgs( Map<String,Object> args ) {
… = (String[]) args.get( “launcher.arguments”;
}
Экспортированный JAR является исполняемым JAR. JPM может быть легко преобразован в локальный исполняемый файл.
jpm install -n mycode mycode.jar
Вы можете установить jpm с http://jpm4j.org/.
Роберт: Спасибо, Питер, фрагмент кода аргумента запуска - именно то, что мне нужно.
О структуре папок:
Мне нужно, чтобы мои пакеты были обновлены. Если я встраиваю все пакеты в.Jar, я не смогу их обновить. Мне просто нужно упаковать Launcher, имея комплекты снаружи.
BndTools имеет два варианта экспорта. 1, где вы можете встроить весь модуль запуска и все связки внутри одного JAR. Либо вариант 2 заключается в размещении пакетов внутри каталога lib и запуске их с помощью сценариев оболочки (start.bat, start.sh). Я ищу решение без shell-скрипта.
Питер: Даже если пакеты находятся внутри, вы все равно можете обновить их, если не очистите область хранения Framework. Например, вы можете легко включить File Install и загрузить пакеты из каталога или использовать другой агент управления, Apache Ace.
С моей точки зрения, текущий экспорт JAR (мне на самом деле очень не нравится экспорт каталогов, он грязный) настолько хорош, насколько это возможно. У него очень хорошая модель выпуска, всего один файл, который легко обновлять и обновлять. С JPM вы можете установить его в любой системе.
Так что если вы хотите что-то еще, вам придется создать свой собственный экспортер...