SciJava 是一个为科学提供软件的项目合作项目 计算——在可行的情况下合作和重用代码的努力。
它也是基础软件库的集合,在此基础上 ImageJ2和Fiji已建成。
SciJava 组件集合
以下组件层是 SciJava component collection 的一部分:
- SciJava - 不特定于图像处理的基础层,包括具有强大插件框架和应用程序容器的SciJava Common共享库,以及基于其构建的插件。
- ImgLib2 - N 维图像处理的核心库。
- SCIFIO - N 维图像 I/O 的核心库。
- ImageJ2 - N 维图像处理的核心库和应用程序。
- Fiji - ImageJ 和 ImageJ2 的“包含电池”分布,捆绑了许多有助于科学图像分析的插件。
- BigDataViewer - 重新切片浏览器和 Fiji 插件,用于 TB 大小的多视图图像序列
- TrakEM2 - 斐济插件套件,用于形态数据挖掘、三维建模和图像拼接、注册、编辑和注释。
- Bio-Formats - 用于生命科学图像格式 I/O 的库和 ImageJ 插件。
该集合中的所有组件均由 SciJava 的 Bill of Materials 管理,以便下游组件更轻松地使用它们,而不会出现版本冲突。
SciJava 承诺
以下项目是 SciJava 承诺的一部分,旨在尽可能地共同努力、重用代码和协同作用:
有关更多详细信息,请参阅Architecture和Governance页面以及SciJava website。
SciJava 常见
SciJava Common 是SciJava软件的通用库。它提供了一个插件框架,具有用于服务发现的可扩展机制,由其自己的注释处理器支持,以便可以动态加载插件。 ImageJ2 和SCIFIO 都使用它。
插件框架
首先,SciJava Common 是一个插件框架——开发高度模块化和可扩展的 Java 应用程序的基础。
插件发现
Java 类路径上的所有可用插件都会自动发现并可用。这是通过扫描文件路径META-INF/json/org.scijava.plugin.Plugin的类路径资源来完成的。此类文件由 Java 注释处理器在编译时生成,该处理器根据 Java 类上的 @Plugin 注释编写这些文件,这一想法受到 SezPoz 项目的启发。
应用程序容器
所有程序状态(例如可用插件)都可以从称为“应用程序上下文”的根对象访问。
服务
ImageJ2 将其各个部分封装为单独的“服务”,提供相关的状态功能并跟踪相关的程序状态。 net.imagej.ImageJ类的实例只不过是这些服务的集合;该实例称为“应用程序网关”。服务被定义为接口,具体实现为插件。此设计在正确的位置提供了seams,以便可以自定义和覆盖每个级别的行为。
SciJava 服务
以下是 SciJava Common 的一些主要核心服务:
- AppService - 跟踪上下文中存在的软件应用程序(SCIFIO、ImageJ2 等)。
- DisplayService - 跟踪可用显示以及活动显示,并提供创建新显示以可视化数据的方法。
- EventService - 将事件发布到event bus,并允许感兴趣的各方订阅它们。该服务提供了代码库各个部分之间通信的中心方式。
- IOService - 用于在上下文中打开和保存数据的通用工具。
- MenuService - 构建应用程序菜单结构。
- ModuleService - 跟踪可用模块,并提供执行它们的基础设施。
- ObjectService - 跟踪各种类型的可用对象,包括Dataset和Display。
- OptionsService - 用于管理程序设置的工具。
- PlatformService - 提供用于根据部署平台(操作系统、Java 版本等)扩展应用程序行为的挂钩。
- PluginService - 跟踪可用插件,并提供执行它们的基础设施(使用ModuleService)。
- ScriptService - 提供用于运行脚本和宏的实用程序。
- StatusService - 发布正在进行的操作的状态更新。
- ThreadService - 管理多线程。
- ToolService - 跟踪可用工具(将用户输入与行为绑定的逻辑)以及活动工具(在工具栏上选择)。
- UIService - 发现并启动用于与 ImageJ 交互的用户界面。
ImageJ2 服务
ImageJ2 添加的一些服务:
- DatasetService - 用于创建和管理图像数据的工具。
- ImageDisplayService - 与DisplayService类似,但专门针对ImageDisplays。
- OverlayService - 用于创建和管理图像叠加和感兴趣区域 (ROI) 的工具。
SCIFIO 服务
SCIFIO 提供多项附加服务,特别是:
- FormatService - 管理可用图像格式的服务。
菜单系统
SciJava 菜单系统分为多个层,以便更轻松地覆盖其行为或自定义其在用户界面中的外观。
模块
系统已知的每个模块(通过ModuleService)可以有一个menuPath,说明它应该位于菜单中的位置(默认情况下)。它还有一个menuRoot,说明它应该位于which菜单中,默认为APPLICATION_MENU_ROOT,指示主应用程序菜单结构。
菜单服务
MenuService负责使用menuPath和menuRoot值为系统中所有可用模块构建ShadowMenu树结构。这些树结构与 UI 无关。每menuRoot有一个ShadowMenu,可向MenuService随意请求。
用户界面
然后,UIService 负责根据可用的ShadowMenu 构建实际的特定于 UI 的菜单栏(或它想要的任何 UI 组件和/或小部件)。 MenuCreator 接口下有一个类型层次结构,旨在用于此目的;例如,SwingJMenuBarCreator 实现 MenuCreator 来创建和维护反映特定 ShadowMenu 状态的 Swing JMenuBar。
变更如何传播
当添加、删除或更改模块时(通过 ModulesAddedEvent、ModulesRemovedEvent、ModulesUpdatedEvent),MenuService 会监听并相应更新相关的 ShadowMenu。它通过触发相应事件来通知相关方已这样做:MenusAddedEvent、MenusRemovedEvent 或 MenusUpdatedEvent。
API 版本历史
API 更改历史记录可在以下位置找到:https://abi-laboratory.pro/java/tracker/timeline/scijava-common/




