jython是python语言的java实现,理论上是支持无缝调用java类库,但在实际使用中经常会碰到类库设置问题,以下是我学习到的一些解决方法。
jython解释器启动时
$ jython -J-cp=foo.jar:bar.jar
-J-cp的值会传递给jvm,具体可以参照jython –help。
简单jython脚本
import sys if __name__ == '__main__': sys.os.path.append('foo.jar') sys.os.path.append('bar.jar') // do stuff
追加到sys.os.path中。个人不是很清楚这种方法的具体原理是什么,但是对简单的脚本还是可行的。
设置CLASSPATH
如果是做类似JDBC的脚本时,sys.os.path貌似是无效的,一直会报找不到指定的driver。这时就需要设置CLASSPATH了。
#!/usr/bin/env sh ORIGIN_CLASSPATH=`echo $CLASSPATH` LIB_DIR=. LIB_JARS=`ls $LIB_DIR/*.jar | tr '\n' ':'` export CLASSPATH=$LIB_JARS:$ORIGIN_CLASSPATH jython foo.py $@
相信有Java背景的人很熟悉这个环境变量。这里假设jython脚本名字为foo.py。上面的内容表示列举当前目录下的jar文件并设置CLASSPATH,jvm读取CLASSPATH后决定到哪里找类。
小结
某种意义上来说,个人认为各种方法的目的都是让jvm能够接受到类库地址设定。
其次,对于需要维护下去的脚本来说,建议使用第三种方式。