提问
 找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,极速登录

插件开发---菜鸟入门及坑点全解

Alex-ce 帆软插件开发者 初学乍练(Lv1)
发表于 2016-3-10 23:11:14 | 显示全部楼层 |取消关注该作者的回复
亲们,最近是不是看到传说哥发了很多插件开发招标,但想做又找不到方向?或者做到一半又各种坑?现在,我亲自经历的坑点教程来啦~~~大家一起来拍砖~~不对,一起来撒花~~,废话不多说,下面都是坑。。
一  开发环境搭建和Debug
       开发工具:Intellij IDE v15  (本来想用eclipse的,但我按传说哥的那个eclipse搭建教程实在不行,所以还是用这个吧)
       JDK:  1.8   (JDK怎么装这个就不要写了吧,自己度娘去)
       安装好后,首先去把源码clone下来。在这里要说一下,论坛里也有教程是教大家直接新建一个插件的工程,然后再引用fineReport的核心包。这样也行,但个人觉得还是看一下源码比较好,这样对我们理解fineReport的类结构和实现逻辑有很大帮助;其次,FR的API说明文档真的很坑爹啊,说明简单到简直是惜字如金啊,看了没有看一个样啊(要变身咆哮哥的节奏~~)。所以,还是看一下源码吧~
     源码的下载(点击这里)跟配置方法看这个链接(点击这里注意:这里有两个坑!!
     1.进行到上面教程的第四步的时候,也就是配置好class输出路径的时候,你会发现有一大堆红点!!
         2655456e129ad1d2da.png
      没错,聪明的你发现有个setup sdk,这里是要设置java的JDK。大胆点击进去,你就会弹出一个框让你选择JDK安装路径(我的是C:\Program Files\Java\jdk1.8.0_66)。选择后就会发现红点都消失啦。
     2.上面教程的第12步,要在plugins文件夹里再新建一个文件夹保存plugin.xml,一定要新建一个文件夹,新建一个文件夹,新建一个文件夹(重要事情说三次),一个插件一个文件夹,不是直接把plugins放在里面,这样是不行的。

     好了,上面的教程你通过而且没有任何问题的话,你可以入手开发了。这时候你可能想骂娘了,TMD这源码我看都看不懂啊,那个组件的代码在哪里都不知道,开发条毛线啊(摔~)!!!不急,大神们早就想到你们这小样,已经给了查找目标组件代码的解决方法(点击这里),而且也给了很多现成的插件源码例子(点击这里),可以找一些跟你开发相关的插件来看(TMD一大堆我怎么知道那个是我需要的啊~~这,你调戏传说哥去吧,他应该知道(传说哥别拿板砖拍我啊~~))。

二 插件工程及配置文件分析
       1.plugin.xml文件配置
        经过上面的行动,你已经有信心开始入手开发了,这时候我们开始新建一个插件Module,配置plugin.xml文件,配置文件的各个节点意义可以看这里
        可能有哥们说,看完我不知道有什么用。呵呵,我不会笑你的,因为我看完了也不知道。所以我加了下面两个图作对比:
       6957956e13dc8b413d.png       268056e13d0c1bc91.png

       图1是我本地的plugin配置文件,图2是安装这个插件后显示的信息,可以很清楚的看到,在changenote之前的定义的元素就是用来显示安装后的信息,<extra-core>,<extra-report>,<extra-designer>

       这三个才是我们插件程序需要使用的加载入口,当然,按照大神们写的节点说明,可用的加载入口有六个,分别对应不同模块,而class的值就是我们写的插件目标类,以我写的为例子,<extra-core>里的LocaleFinder用于加载国际化资源,<extra-designer>里的CellAttributeProvider就是我的插件初始化入口。
     
       有哥们可能会说,我直接复制你的下来改,怎么还不可以初始化我写的插件!!来,哥给你列一下坑点:
       A. 你加载的模块入口选对了吗?extra-core里的东西不可以用extra-designer来加载,首先要找到正确的加载入口。不知道是那个?请教插件群里的大神吧。
       B. 你加载的标签写对了吗?同样是extra-core模块,但有多个加载标签,LocaleFinder用于加载国际化文件;JavaScriptFileHandler用于加载js和css;而且一个模块可以有多个加载标签,你写对了吗?如果不知道,请教群里的大神吧。如果有下载源码,也可以自己加载类的顶级接口,例如我写的这个CellConditionAttributeTableProvider,它的顶级接口为CellAttributeProvider,里有个MARK_STRING = "CellAttributeProvider"的字段,这个值就是加载的标签。

       C. 你更新了WebReport/WEB-INF/plugins对应文件夹里对应的plugin.xml文件了吗?上一个大坑里的第二个小坑你还记得吗?里面的plugin文件要跟插件里的文件同步,要不然你改得飞起都没用。


       2.properties文件配置
       ok,上面的坑你都跳过了,开始进入调试,但你发现你在国际化文件里配置的property