eclipse - JavaFx8 + OSGi + Gradle 多项目的工作模块化示例,无需额外工具?

标签 eclipse gradle javafx osgi equinox

我现在遇到了一个弱者无法解决的问题。

我必须创建一个模块化的JavaFX应用程序,其中每个组件定义一个“域单元”(带有模型+ View + Controller )。每个组件都可以加载到“外壳应用程序”中(作为选项卡 View 或多个选项卡 View 的内容),并且模块可以依赖于另一个模块(如果未加载其依赖项,则选项卡中的内容将不会出现) )。

这就是为什么我计划创建一个基于 OSGiJavaFX 应用程序,并使用 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 进行多项目的布局示例。也许会给你带来启发。

https://github.com/antoniomaria/gradle-karaf-bnd-project

关于eclipse - JavaFx8 + OSGi + Gradle 多项目的工作模块化示例,无需额外工具?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36431918/

相关文章:

android - 如何在 gradle 中启用弃用方法警告

java - 获取添加到网格 Pane 的按钮数组中位置 [x] [y] 的值

java - maven 使用 --add-exports 运行和构建

android - 如何将ProGuard添加到具有依赖项的项目中?

gradle - 如何抑制 gradle 的所有输出?

properties - JavaFX - 将监听器添加到 Pane 以检查它是否显示

java - 用于 Eclipse 和运行 Glassfish 的 GlassFish 工具包问题

android - 这个Android Studio项目的build.gradle中声明了哪些第三方依赖?

eclipse - 开始 Eclipse 插件开发的最佳资源是什么?

java - 用于收集运行时性能指标的工具