我现在遇到了一个弱者无法解决的问题。
我必须创建一个模块化的JavaFX应用程序,其中每个组件定义一个“域单元”(带有模型+ View + Controller )。每个组件都可以加载到“外壳应用程序”中(作为选项卡 View 或多个选项卡 View 的内容),并且模块可以依赖于另一个模块(如果未加载其依赖项,则选项卡中的内容将不会出现) )。
这就是为什么我计划创建一个基于 OSGi 的 JavaFX 应用程序,并使用 Gradle 将其构建为多项目。
我已经尝试了数十个教程,但没有成功,而且我经历过,其中大多数教程:
- 已经过时,不可重现(例如 elcipse 的界面,模板已更改,bndtools 教程似乎不起作用,equinox 没有 felix 似乎无法工作,javafx8+osgi 会产生不同类型的问题......等等。 )
- 对于初学者来说太复杂了(我刚刚开始学习 OSGi 和 Gradle),而且他们跳过了我不知道的重要步骤
- 包含太多“IDE 魔法”(我宁愿键入一些代码而不是在 Eclipse 中填写表单)
- 有些使用不同的工具(maven/tycho、bndtools、e(fx)clipse)解决问题,但我没有时间学习它们
我希望我的应用程序独立于 IDE 环境。如果可能的话,我不想想要使用 e(fx)clipse 或 BndTools(即使它们可以使构建过程更容易)。 我正在尝试 OSGi 实现,这就是为什么我宁愿不在 Equinox、Felix 或 Karaf 之间进行选择。 我已经在 .NET 世界中编写了类似的应用程序,但在我看来不可能在 Java 世界中做同样的事情。
我的主要问题是:
- 有可能实现我的想象吗?
- 如何创建一个与 IDE/平台无关的 gradle 多项目(如果项目不依赖于 Eclipse 环境或 Equinox,但可以使用它们)?
- 初始化应用程序(shell 应用程序 + 模块)和加载独立模块/ bundle /组件的最佳方法是什么?
- 如何将我的 View 分成子项目(build.gradle 文件应包含哪些内容)?
- 如何解决javafx8与osgi不兼容的问题?
- 在 gradle 中应用 javafx 插件的正确方法是什么?
- 哪些教程最相关?
- 是否有任何工作示例、模式或教程(不使用其他工具)可以解决相同的问题(仅使用 osgi+javafx+gradle)?
最佳答案
我可以将您的问题分组到不同的主题中:
OSGI
你只需要google一下就可以找到这是一个鼓励模块化、提供热部署功能等等的java规范。正如我告诉你的,只是像 Java Servlet API 这样的规范,因此它们是 OSGI 规范的不同提供者或实现者,例如 Felix 和 Equinox。 Karaf 是一个基于 Felix 的 OSGI 容器,因此您可以获得所有 felix 的好处以及令人上瘾的 karaf native 功能。因此,我鼓励您使用 Karaf。
Aquote BndTool
为了满足 OSGI 规范,您的模块需要包含一个 MANIFEST.MF,它包含所有依赖信息,以便 Karaf 创建您的包所需的类加载器。 假设您不想手动创建 MANIFEST.MF 文件,您可以使用 aqute/bndtool 来创建。不要搞乱 eclipse 插件的 bndtool。该应用程序可以从命令行、maven 插件或 gradle 插件使用。基本上扫描您的类,检查导入,并自动创建 MANIFEST.MF。
Gradle
如果你选择gradle作为构建工具,那么你可以使用:Bnd Gradle plugin 。设置很容易,但请遵循非工作区插件的说明。如果您不想在 eclipse 中使用 BndTool。您在问题中提到的 IDE 独立解决方案。
多项目布局
项目布局应该是什么样子,取决于您的模块化,但是您可以查看这个使用 gradle+osgi+karaf 进行多项目的布局示例。也许会给你带来启发。
关于eclipse - JavaFx8 + OSGi + Gradle 多项目的工作模块化示例,无需额外工具?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36431918/