Возможно, немного поздно, чтобы помочь вам, но я хотел бы документировать простой способ включения JavaFX в среде OSGi на случай, если у кого-то, как и у меня, все еще будут проблемы с этим....
Дело в том, что вам нужно разрешить JavaFX загружать и использовать любой класс, который он хочет (JavaFX использует внутренности JRE, что делает его очень сложным для сборки), поэтому вам действительно нужно предоставить ему доступ к OSGi. повышение пути к классам...
Я не эксперт, но в этом блоге Костин Лео из SpringSource объясняет, как это сделать (для любых jar-файлов, предполагающих полный доступ к системному загрузчику классов, а не только к JavaFX) тремя разными способами:
http://blog.springsource.org/2009/01/19/exposed-the-boot-classpath-in-osgi/
Я решил использовать вариант A, который в основном означает установку свойства, указанного OSGi (не специфичного для какой-либо реализации!) В файле конфигурации вашего контейнера OSGi:
org.osgi.framework.system.packages.extra=javafx.application;version=0.0.0 ...
Вы можете увидеть все значение свойства в этом Gist, который я создал:
https://gist.github.com/renatoathaydes/5021107
В основном я установил его со всеми пакетами, которые может экспортировать jar JavaFX 2.2 (и я обнаружил это, просто поместив jar JavaFX в папку развертывания моего Apache Karaf, которая автоматически превращает его в пакет, а затем просмотрев сгенерированный манифест)... кстати, я пытался использовать пакет, сгенерированный Karaf (который использует для этого pax-wrap), но это не сработает из-за того, как JavaFX пытается загрузить ваши классы (которые не видны в предпринятом пакете JavaFX, не говоря уже обо всех пакетах JRE, к которым пытается получить доступ JavaFX).
Я подозреваю, что не все пакеты, которые я добавил, на самом деле необходимы, но на всякий случай я оставил их все сгенерированными оболочкой Karaf, и поскольку это работает, я не буду это менять, если для этого нет веской причины.
Теперь любой из моих пакетов может использовать JavaFX, если файл jfxrt.jar присутствует в папке JRE lib.
person
Renato
schedule
17.02.2013