修改Apache Velocity源码并重新打包velocity1.7.jar已解决动态加载自定义函数的问题(一)
velocity是Apache开源的模板引擎,非常的灵活好用,且支持自定义的函数编写,具体的就不细说了,大家可以百度学习。
今天遇到一个情况,那就是我已经写好的工具做成了软件,如文档生成等工具,使用的模板引擎就是velocity,自定义函数也内置了一些,但是由于每次需要的函数都不同,每次都需要拓展自定义函数,导致每次都要重新打包软件,于是想到了java插件化开发,即单独使用接口写一个自定义函数项目然后打包成jar,让工具添加加载这个插件即可实现功能,且不需要每次修改工具,而只需要修改自定义函数这个项目,之前遇到的问题解决方式如下:https://blog.csdn.net/rico_zhou/article/details/103817403
现在遇到的问题是不仅软件需要动态的使用类加载器去加载自定义函数这个项目打包的jar,加载完成后,由于velocity也是通过类名去加载自定义函数类,这就好比velocity加载了一个插件,而这个插件又是另一个程序(软件)加载进来的,导致velocity无法获取。
听起来有些绕,举个例子:以下代码是velocity初始化的时候传递已经继承了Directive类的自定义函数类名
这个是自定义函数,继承Directive
//实例化模板引擎需要添加配置此实现类,每个实现类需要加入变量CustomFunct