最近一个java web项目中使用到了python,使用jython库来执行python脚本。jython会把python编译成class文件供java虚拟机执行。项目编写好之后放到Tomcat中执行时OK的,但是在Tomcat的管理界面undeploye这个项目时发现会失败,查看webapps目录发现jython-standalone.jar无法删除。
后来看了Tomcat的类加载器机制,Tomcat会为每个项目都创建一个单独的类加载器实例,然后想到可能加载python的类加载器不是项目的类加载器而是Tomcat的公用类加载器或者jVM的类加载器,然后更改设置:
PySystemState sys = Py.getSystemState();
sys.setClassLoader(this.getClass().getClassLoader());
sys.path.add(pythonPath + "");
在初始化python的时候,设置其类加载器为本项目class的类加载器,经过测试代码正常执行,项目也可以正常从Tomcat的管理界面中卸载。
网友评论