如何让Jython自动加载一个Jar包
Jython 的docstring 严重缺失, pydev的calltip基本上没什么用, 所以使用 jython 开发比较痛苦.
但 jython 相比 cpython 仍有2个优势:
1. windows/linux下安装都超级简单, 在linux下安装也不需要root账号.
2. 可以使用丰富的java类库, 比如, teradata只提供jdbc driver, 没有python API module
=========================
如何让jython自动加载一个新的jar
=========================
用 jython 又写个小程序, 需要使用 teradata 的 jdbc 库(terajdbc4.jar和tdgssconfig.jar). 开发时将两个jar库加到Eclipse(pydev)的 external library中, 开发调试都很顺利.
但部署时, 就要考虑如何让jython加载我们的jar包了. 最简单的方法是, 将terajdbc4.jar配到OS的CLASSPATH环境变量中.
以前我研究出的另一个方法, 是修改 jython.jar 中的 MANIFEST.MF文件, 把依赖库加到MANIFEST.MF的Class-Path中, 具体配置如下,
Class-Path:
lib/tdgssconfig.jar
lib/terajdbc4.jar
这涉及到解压/更新文件/压缩, 确实很麻烦. 随便改动jython.jar也不是一个好的做法. 另外, 这种方法只能解决jar 依赖, 如果是依赖一个java class, 这种方法就不好用了.
这次决心找找有没有其他办法, 研究了Jython的源码, 终于找到一个方便的方法. 即修改jython的registry 文件. 下面是详细说明.
在查看jython的源码后 (C:\jython2.5.2\src\org\python\core\packagecache\SysPackageManager.java)
有如下收获: jython会根据安装根目录下 registry 文件的配置, 预先加载一些java 的jar 和 class, 下面是registry文件相关的3个设置,
(1)python.packages.paths, 默认取值为java.class.path, sun.boot.class.path, 实际的目录为可通过java代码. 而这两目录值是可以jython.bat中的JAVA_HOME推导出来的.
注意该设置的取值仍然register的entry, 如果我们要新加目录, 增加一个property entry.
jython 会加载目标目录中的所有class.
(2)python.packages.fakepath, 没有默认值, 取值是一个实际的目录地址.
jython 会加载目标目录中的所有class.
(3)python.packages.directories, 默认值为java.ext.dirs, 实际的目录目录值是可以jython.bat中的JAVA_HOME推导出来的, 一般为 Your_JavaHome/lib/ext
注意该设置的取值仍然register的entry.
jython 会加载目标目录中的所有 jar.
默认的 registry 文件的设置
# Properties to check for initializing and updating the package cache
# Hopefully you won't have any need to change these
python.packages.paths = java.class.path, sun.boot.class.path
python.packages.directories = java.ext.dirs
修改后的设置, 增加了一个 apache.class.path, python.packages.fakepath 和 teradata.jdbc.dirs
python.packages.paths = java.class.path, sun.boot.class.path, apache.class.path
python.packages.directories = java.ext.dirs, teradata.jdbc.dirs
python.packages.fakepath = c:\\jboss_java_util\\classes
apache.class.path = c:\\apache_java_util\\classes
teradata.jdbc.dirs = c:\\teradata\\jdbc
=========================
如果碰到其他疑难杂症, 怎么办?
=========================
一旦碰到问题, 关键是要知道问题的原因, 修改 registry 文件的属性 python.verbose 为debug, 会输出更多的信息, 有助于我们找到问题的根源.
默认设置:
python.verbose = message
修改后的设置:
python.verbose = debug
转载于:https://www.cnblogs.com/harrychinese/archive/2012/08/17/Let_Jython_auto_load_some_jar.html
如何让Jython自动加载一个Jar包相关推荐
- springboot加载第三方jar包淘宝sdk进行打包编译
开发工具idea,开发springBoot电商项目,需要加载淘宝的sdk,以下有几种方式加载 通过这种方式加载第三方jar包,可以正常开发,但是打包部署服务器运行的时候会报错缺少jar包,无法打包的时 ...
- android jar 加入图片,Android动态加载外部jar包及jar包中图片等资源文件
Android动态加载外部jar包及jar包中图片等资源文件 Android应用程序由Java开发,因此Java中许多实用的特性,在Android中也有体现.动态加载Class,也就是外部jar包,在 ...
- maven加载本地jar包,无法将本地jar包打进项目
加载本地jar包,无法将jar打进包 1.问题介绍 项目依赖某个私有jar包,由于各种原因,没有将jar包打进本地maven库,选择使用放到项目lib下引用,但是打包时lib文件夹下的依赖包打不进 ...
- Android逆向:某薇直播通过ClassLoader加载的jar包解密
声明:案例分析仅供学习交流使用,勿用于任何非法用途.如学习者进一步逆向并对版权方造成损失,请自行承担法律后果,本人概不负责. 简介 热修复和插件化是目前比较热门的技术,它们都是通过ClassLoade ...
- 解决Android Studio加载第三方jar包,出现包重复加载的问题
2015-02-13 0 个评论 来源:JavAndroid 收藏 我要投稿 通过Maven中央库添加第三方jar包的时候,出现了重复加载jar包的问题,解决办法很简单去掉一个不让它去加载就OK了 一 ...
- 服务器jar包配置文件,spring boot加载第三方jar包的配置文件的方法
前言 今天收到一封邮件,大概内容如下:spring boot鼓励去配置化,那么怎么将第三方jar包中的xml去配置化了? 下面,我们就以Quartz定时任务为例,单独对这个问题来进行说明,如何实现去配 ...
- 关于spring自动加载的那点事儿
背景 惯例要讲一下背景,毕竟问题来源于生活,困难滋生于工作,要是每天吃吃喝喝.无忧无虑,我相信我也没什么问题好写了^_^公司架构组在推新的基础框架,主要是嫌以前的框架用起来太啰嗦了,做了很多感觉多余的 ...
- 一个到顶部自动加载更多的ListView
为什么80%的码农都做不了架构师?>>> 一个可以到顶自动加载更多的ListView,实现该控件的目的是用于im聊天页面场景,一些第三方实现的下拉加载更多也可以实现类似功能,但 ...
- log4j 源码解析_log4j1.x设置自动加载log4j.xml
在没有设置自动加载log4j.xml的时候,一般我们需要这么处理 static void initLogger() {System.out.println("configurating lo ...
最新文章
- leetcode--最长公共前缀--python
- 千兆宽带:是为了速度而提升速度吗?
- 修改title样式_css常见样式命名规则
- Set 和 Map 数据结构
- 在centos7离线安装mysql_CentOS7离线安装MySQL
- rpm包时遇到Header V3 DSA signature: NOKEY时解决办法
- QT5 动态链接库的创建和使用
- java servlet接口开发_servlet三种实现方式之一实现servlet接口
- 部署kafka kafka的service容器和zookeeper kafka客户端 Elasticsearch的客户端
- 【我评】——关于Web标准
- Sharding-Proxy安装_以及_sharding-proxy自动分表配置_Sharding-Sphere,Sharding-JDBC分布式_分库分表工作笔记019
- nexus和maven
- 从零开始了解 kubernetes,还有谁不会?
- 使用JAVA文件上传的几种方式
- 服务器故障与主板维修,服务器主板故障
- Qualcomm笔记
- 谷歌浏览器提示您的连接不是私密连接怎么办
- cocos2d-x精灵的放大和缩小
- html5画布插入图片,html5画布导入图片
- php7.4 redis扩展
热门文章
- 世界上最贵的车是直通车吗?
- 如何跟成功的男人谈恋爱?
- 为什么修电脑的叫自己不要杀毒和清理垃圾?
- 为什么有的安卓手机越用越慢,刷机也不行?
- android新对象锁,Android的线程和对象锁定
- 德鲁伊 oltp oltp_内存中OLTP系列–表创建和类型
- sql 查询手动创建的表_学习SQL:使用SQL查询手动创建报告
- ssas 度量值属性_Analysis Services(SSAS)表格模型–属性和度量
- 德鲁伊 oltp oltp_内存中OLTP –招待看门狗的三个关键点–检查点文件
- 有可能导致HttpQueryInfo 执行时出现12150 错误的一个原因