如果有多个项目都使用jfinal,希望能将jfinal的包放到web容器的共享目录下
但实验后发现这样会造成JFinalFilter读取自己写的Config类(继承JFinalConfig)失败,Class.forName时抛出ClassNotFoundException
问题是JFinalFilter还是final的无法继承,自己写个Filter又无法访问core下面的类,都是default权限的
貌似是ClassLoader加载顺序的问题,其他框架也有类似的情况(把类或者包名配置在xml里面,共享目录下的类通过反射去加载项目路径下的类),不知道是如何避免同样问题的
试试这个方案:自己创建一个 MyJFinalFilter,将 JFinalFilter 中的代码完全 copy 过来,然后项目中的 web.xml 中使用 MyJFinalFilter。这个 MyJFinalFilter 可以放在 web 容器共享目录下,也可以以项目依赖的方式存在。
楼主这个需求我也是头一次碰到,由于 jfinal 的 jar 包一共才 300K 多点,项目启动加载到内存的空间占用几乎可以忽略不计,所以不建议放在 web 容器共享目录。而且让项目自己持有 jfinal jar,更有利于项目将来独立部署到各种环境中,否则你是要再去处理 jar 包的问题的。
而且随着时间的推移,jfinal 版本也在不断更新,未来再处理的时候,你还得去搞清楚这个项目依赖的 jfinal 版本。 ######回复 @rainmanhhh : 放在项目中更省事,300K 多点的体积,没必要去做这个事情,要知道做这个事情,你还得将部署的 war 中 lib 下的 jfinal jar 一个个删除,耗费的这个时间不值得######我试过copy的办法,但Filter中还引用了jfinal.core中的其他类,都是default权限的……
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。