JavaFX и OSGI + Ant в многоплатформенном сценарии - PullRequest
0 голосов
/ 31 января 2020

Я пробовал разные подходы к интеграции JavaFX в многоплатформенном сценарии - вместе с OSGI, Ant и Java 11, уровень соответствия 1.8. Миграция на собственный Java 11 и переход на JLink в настоящее время невозможна.

До настоящего времени все попытки заставить эту работу работать с отдельными фрагментами / расширениями платформы потерпели неудачу, даже несмотря на то, что платформа OSGI зависимости (или фрагменты) показывают все экспортированные пакеты «Доступно:».

manifest.mf (расширение платформы OSGI, Windows, пример):

Manifest-Version: 1.0
Automatic-Module-Name: my.libs.fragment.javafx.os.win
Bundle-ManifestVersion: 2
Bundle-Name: libs-fragment-javafx-os-win
Bundle-SymbolicName: my.libs.fragment.javafx.os.win;singleton:=true
Bundle-Version: 0.0.0
Bundle-RequiredExecutionEnvironment: JavaSE-1.8
Fragment-Host: system.bundle; extension:=framework
Eclipse-PlatformFilter: (& (osgi.nl=de_DE) (osgi.ws=win32) (osgi.os=win32) (osgi.arch=x86_64))
Bundle-NativeCode: libs/javafx_win/decora_sse.dll;
 libs/javafx_win/glass.dll;
 libs/javafx_win/glib-lite.dll;
 libs/javafx_win/prism_common.dll;
 libs/javafx_win/prism_d3d.dll;
 libs/javafx_win/prism_sw.dll;
 libs/javafx_win/gstreamer-lite.dll;
 libs/javafx_win/javafx_font.dll;
 libs/javafx_win/javafx_iio.dll;
 libs/javafx_win/jfxmedia.dll;
 libs/javafx_win/fxplugins.dll;
  osname=Win32; processor=x86_64 
Bundle-ClassPath: .,
 libs/javafx_win/javafx.base.jar;visibility:=reexport,
 libs/javafx_win/javafx.graphics.jar;visibility:=reexport,
 libs/javafx_win/javafx.controls.jar;visibility:=reexport,
 libs/javafx_win/javafx.swing.jar;visibility:=reexport,
 libs/javafx_win/javafx.fxml.jar;visibility:=reexport,
 libs/javafx_win/javafx.media.jar;visibility:=reexport,
 libs/javafx_win/javafx-swt.jar;visibility:=reexport
Comment: Import-Package not required due to Bundle-Classpath, but might be for Maven to come and shouldn't hurt  
Import-Package: com.sun.glass.events,
 com.sun.glass.ui,
 com.sun.glass.ui.delegate,
 ...
Export-Package: com.sun.glass.events,
 ...

Я пытался без ; visibility: = reexport , только экспорт пакетов, без какого-либо другого результата.

Использование чистых фрагментов с

Fragment-Host: my.thirdparty.libs;bundle-version="1.0.0";visibility:=reexport

в манифестах и ​​

Eclipse-ExtensibleAPI: true 

в манифесте хоста был получен почти тот же результат с зависимостями подключаемого модуля «Доступный», но с неразрешенными пакетами и классами в зависимых пакетах.

Соответствующая конфигурация для Bundle-NativeCode: и / или build.properties тоже не ясно.

Кажется, что работает на время компиляции, но так как пакеты не могут быть разрешены в зависимых комплектах, я могу nnot build, чтобы проверить и быть уверенным.

bin.includes = META-INF/,\
        .,\
        libs/javafx_win/decora_sse.dll,\
        libs/javafx_win/fxplugins.dll,\
        libs/javafx_win/glass.dll,\
        libs/javafx_win/glib-lite.dll,\
        libs/javafx_win/gstreamer-lite.dll,\
        libs/javafx_win/javafx-swt.jar,\
        libs/javafx_win/javafx.fxml.jar,\
        libs/javafx_win/javafx.media.jar,\
        libs/javafx_win/javafx_font.dll,\
        libs/javafx_win/javafx_iio.dll,\
        libs/javafx_win/jfxmedia.dll,\
        libs/javafx_win/prism_common.dll,\
        libs/javafx_win/prism_d3d.dll,\
        libs/javafx_win/prism_sw.dll,\
        libs/javafx_win/javafx.base.jar,\
        libs/javafx_win/javafx.controls.jar,\
        libs/javafx_win/javafx.graphics.jar,\
        libs/javafx_win/javafx.swing.jar,\
        libs/javafx_win/javafx.fxml.jar,\
        libs/javafx_win/javafx.media.jar,\
        libs/javafx_win/javafx-swt.jar
source.. = src/
extra.. = libs/javafx_win/javafx.base.jar,\
        libs/javafx_win/javafx.controls.jar,\
        libs/javafx_win/javafx.graphics.jar,\
        libs/javafx_win/javafx.swing.jar,\
        libs/javafx_win/javafx.fxml.jar,\
        libs/javafx_win/javafx.media.jar,\
        libs/javafx_win/javafx-swt.jar
jars.compile.order = .,\
        libs/javafx_win/javafx.base.jar,\
        libs/javafx_win/javafx.controls.jar,\
        libs/javafx_win/javafx.graphics.jar,\
        libs/javafx_win/javafx.swing.jar,\
        libs/javafx_win/javafx.fxml.jar,\
        libs/javafx_win/javafx.media.jar,\
        libs/javafx_win/javafx-swt.jar

Может быть правильным или нет - я не могу найти документацию по необходимым зависимостям нативного кода (.dll, .so, .dylib) - большинство особенно их зависимости системной библиотеки.

Может кто-нибудь уточнить, что здесь может быть не так и указать мне правильное направление?

Источники:

https://spring.io/blog/2009/01/19/exposing-the-boot-classpath-in-osgi/

https://osgi.org/specification/osgi.core/7.0.0/framework.module.html#framework .module.dependencies

http://blog.vogella.com/2016/02/09/osgi-bundles-fragments-dependencies/

https://help.eclipse.org/2019-12/topic/org.eclipse.platform.doc.isv/reference/misc/bundle_manifest.html

https://holistictendencies.wordpress.com/2011/03/28/bundle-nativecode-using-platform-specific-dlls-from-osgi/

...