FineReport/FineBI的插件包,都是以一个zip文件的形式存在的,zip文件的结构如下所示
--------xx.name.zip ----plugin.xml ----xx.name.plugin.jar ----zz.jar ----yy.jar |
其中plugin.xml是记录插件的摘要信息,xx.name.plugin.jar是由插件的源代码编译成的class文件打包成的jar文件,而zz.jar和yy.jar则是插件依赖的非fine-xxx开头的第三方jar包。这一节我们重点介绍plugin.xml的内容。
plugin.xml是一个标准的xml文件,根节点为<plugin></plugin>,其子节点包含下表项:
节点名 | 含义 | 默认值 | 备注 |
---|---|---|---|
id | 插件的唯一标志符 | 无 | 所有的插件id都不应该出现重复 |
main-package | 插件中class的包名 | com.fr.plugin | 如果插件代码都在com.fr.plugin包下,则不需要这个属性,否则就需要利用这个属性来声明插件的包名 |
name | 插件的名字 | 无 | 该名字会在插件管理器以及帆软市场中显示 |
active | 插件是否处于激活状态 | no | 如果不写,该插件会默认处于未激活状态(无法使用插件功能) |
hidden | 插件是否在插件管理器中隐藏 | no | |
version | 插件版本 | 无 | 每次更新插件,需要手动改动这个版本号 |
env-version | 插件适配的报表版本 | 无 | 一般为10.0 |
app-version | 插件适配的移动端版本 | 无 | 仅移动端插件需要该属性 |
jartime | 插件适配的jar版本 | 无 | 只有jar包的build日期大于插件要求的时间,插件才能正常运行 |
vendor | 插件作者 | 无 | |
description | 插件的简要描述信息 | 无 | |
change-notes | 插件的更新信息 | 无 | 一般以倒序来写更新信息,方便查看插件最近的更新内容 |
extra-core | 核心模块下的接口接入点 | 无 | |
extra-decision | 平台模块下的接口接入点 | 无 | |
extra-schedule | 定时调度模块下的接口接入点 | 无 | |
extra-mobile | 移动端模块下的接口接入点 | 无 | |
extra-report | 报表模块下的接口接入点 | 无 | |
extra-form | 决策报表模块下的接口接入点 | 无 | |
extra-chart | 图表模块下的接口接入点 | 无 | |
extra-design | 设计器模块下的接口接入点 | 无 | |
extra-chart-design | 设计器图表模块下的接口接入点 | 无 | |
extra-analyse | BI模块下的接口接入点 | 无 | |
function-recorder | 插件功能点类接入点 | 无 | |
lifecycle-monitor | 插件生命周期类接入点 | 无 | |
prefer-packages | 插件优先依赖目录 | 无 | 用于解决插件依赖jar和主工程中jar冲突问题,子标签:prefer-package |
dependence | 插件依赖信息接入点 | 无 | |
attributes | 插件自定义属性 | 无 | |
move-after-install | 插件安装后会执行的一些文件移动操作 | 无 |
插件之间也可以有依赖,例如插件A(id为com.test.a)、B(id为com.test.b)依赖了插件X(id为com.test.x),这个时候,可以在A或者B的plugin.xml的dependence属性来描述
<dependence> <item type="plugin" key="com.test.x"/> </dependence> |
通过这样的描述,在安装插件A或者B的时候,就会提示需要先安装插件X(如果是从帆软市场安装的,会自动先安装依赖的插件)。
插件的接入点文件中,也可以存储一些可变的配置。这些可变的配置,就是在attibutes节点下增加自定义的配置属性,如下所示:
<attributes> <encode name="你好,世界"/> </attributes> |
然后在插件中,就可以通过上下文获取该配置属性
PluginXmlElement xml = PluginContexts.currentContext().getXml().getElement(PluginElementName.Attributes); String name = StringUtils.EMPTY; if (xml != null) { List<PluginXmlElement> children = xml.getChild("encode"); if (children != null && !children.isEmpty()) { name = children.get(0).getAttribute("name"); } } System.out.println(name); |
这样就能在插件中获取到自定义的配置属性,并在控制台输出:你好,世界。