领导想要在项目中实现jar动态加载,并且推荐使用pf4j这个框架,让我先研究研究。本想着this is so easy! U are kidding me。结果搞了一天,心中万只草泥马奔腾...网上对这个框架的资料也不多,试着跟着某些博主的步骤去做,但还是在主程序中找不到jar包中的插件,无语了...气煞我也
搞了两天,没办法了,试着在官网中的demo找突破口,结果找到了。。。嘻嘻,看下我是怎样平坑的。
第一步,没什么特别的坑,正常地构建接口模块,添加pf4j依赖,定义接口并生成jar包。
第二步,坑之所在。构建插件模块,添加第一步生成的接口jar包和pf4j为依赖,实现接口,添加@Extensions注解。
很多同学以为上面这样就已经可以了,生成插件jar包,结果。。。当然是掉坑了
坑就在插件模块的build.gradle文件中。看下图
第一点,红框部分的注解处理是必须要添加的,不要以为只添加了pf4j依赖就可以了。不然你生成的jar包中的 META-INF目录下是没有extensions.idx这个文件的,这文件里只有一行,就是插件实现类的全类名,pf4j就是靠着这个实例化你的插件的。
第二点,生成插件jar包时必须带有manifest中的这两个属性,pf4j会根据这两个属性判断这个jar包是否合法。
以上两点就是坑,就是坑,就是坑...
第三步,也没有什么特别要注意的地方,建立项目,添加接口jar包、logback框架(pf4j的运行需要这个日志库),在项目根目录新建plugins目录,把插件jar放到plugins目录下。点击运行,一切OK,感觉空气都清新了。