开发者社区 > 云原生 > 容器服务 > 正文

JFinal的包放在web容器的共享目录下无法初始化:报错

如果有多个项目都使用jfinal,希望能将jfinal的包放到web容器的共享目录下
但实验后发现这样会造成JFinalFilter读取自己写的Config类(继承JFinalConfig)失败,Class.forName时抛出ClassNotFoundException
问题是JFinalFilter还是final的无法继承,自己写个Filter又无法访问core下面的类,都是default权限的
貌似是ClassLoader加载顺序的问题,其他框架也有类似的情况(把类或者包名配置在xml里面,共享目录下的类通过反射去加载项目路径下的类),不知道是如何避免同样问题的

展开
收起
kun坤 2020-06-09 13:53:51 601 0
1 条回答
写回答
取消 提交回答
  •     试试这个方案:自己创建一个 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权限的……

    2020-06-09 13:53:57
    赞同 展开评论 打赏

国内唯一 Forrester 公共云容器平台领导者象限。

相关电子书

更多
阿里云文件存储 NAS 在容器场景的最佳实践 立即下载
何种数据存储才能助力容器计算 立即下载
《容器网络文件系统CNFS》 立即下载