Hello World не печатается на консоли, потому что созданный вами jar на самом деле не является пакетом.
Как ни странно, felix позволяет вам запускать jar, который не имеет никакой информации, связанной с OSGI, в манифесте.
Мне непонятно, что означает запуск такого пакета? Может быть, классы будут опубликованы, а может и нет.
Большинство java-фреймворков сканируют файлы в jar-файле и используют рефлексию или анализ байтового кода для поиска соответствующих классов.
Для обычных фреймворков издержки на сканирование jar-ов возникают только один раз при запуске.
OSGI был разработан, чтобы быть легким и также используется на мобильных устройствах.
Более того, поскольку в OSGI пакеты могут приходить и уходить, они разработали более эффективный подход.
Пакеты OSGI хранят метаданные в манифесте.
Это простой текстовый файл, который всегда находится в одном и том же месте (в банке): "META-INF / MANIFEST.MF".
Если вы используете zip-инструмент для проверки файла в банке, вы должны увидеть что-то вроде этого:
Manifest-Version: 1.0
Archiver-Version: Plexus Archiver
Created-By: Apache Maven
Built-By: Peter Rader
Build-Jdk: 1.8.0_111
Для дальнейшего устранения неполадок OSGI я бы предложил вам проверить (и опубликовать) созданный манифест.
Действительный манифест OSGI будет выглядеть примерно так:
Manifest-Version: 1.0
Archiver-Version: Plexus Archiver
Created-By: Apache Maven
Built-By: Peter Rader
Build-Jdk: 1.8.0_111
Bundle-Name: testa
Bundle-SymbolicName: testa.impl
Bundle-Version: 1.0.0
Bundle-Activator: testa.impl.Activator
Import-Package: org.osgi.framework
Когда Феликс читает этот манифест, он использует запись "Bundle-Activator", чтобы найти активатор (если есть).
Замените манифест, и комплект должен быть развернут в обычном режиме.
Просто создайте текстовый файл с именем «META-INF / MANIFEST.MF», содержащий текст выше, в месте, относящемся к банке.
Затем замените файл манифеста в jar следующей командой linux (или вашим любимым zip-инструментом):
zip testa-0.0.1-SNAPSHOT.jar -u META-INF/*
ожидаемый вывод команды zip:
updating: META-INF/MANIFEST.MF (deflated 36%)
Обязательно откройте банку с zip-файлом и убедитесь, что содержимое изменилось.
Теперь, если вы установили и запустили пакет, он должен вывести «Hello World!».
Хотя это решает проблему, это не очень чистое решение.
В спецификации jar есть довольно странные правила относительно того, как должны быть отформатированы записи в манифесте:
https://docs.oracle.com/javase/7/docs/technotes/guides/jar/jar.html#Manifest_Specification
В частности:
No line may be longer than 72 bytes (not characters), in its UTF8-encoded form.
If a value would make the initial line longer than this,
it should be continued on extra lines (each starting with a single SPACE).
Следовательно, вы не хотите редактировать этот файл вручную.
Как уже отмечали другие, у вас есть различные варианты автоматического создания манифеста OSGI.
Как и раньше, вы можете проверить манифест в сгенерированном банке, чтобы убедиться, что он генерируется правильно.