python调用jar包
坑点记录
问题: 通过java生成的jar包, 使用jpype调用jar包时总是提示找不到类
错误方式1: 通过 jar cvf 方式进行手动打包
错误方式2: 通过jpype的 -Djava.ext.dirs 参数来配置所有的依赖jar包
正确方式: 通过maven的pom来配置build, 使得maven打包时生成一个带依赖的jar包.
1. 安装python和java环境
1. 安装python环境, 建议安装python3.6.
2. 安装python的第三方库jpype: pip install jpype1
3. 安装java环境, 建议安装java1.8.
注意事项: python版本和java版本必须是相同的位数. 即同为32位或同为64位.
2. 安装配置maven仓库
1. 安装maven,建议安装maven3.5.0
2. 设置环境变量
# 设置环境变量MAVEN_HOME MAVEN_HOME=D:\Program Files\apache-maven-3.5.0\bin # 设置环境变量Path Path=%MAVEN_HOME%\bin; # 开启一个cmd创建,验证环境变量配置成功 mvn -version
3. 创建repository目录: %MAVEN_HOME%\repository
4. 修改maven配置: %MAVEN_HOME%\conf\settings.xml
主要完成两件事: 1. 配置maven镜像. 2. 配置本地仓库
<?xml version="1.0" encoding="UTF-8"?> <settings xmlns="http://maven.apache.org/SETTINGS/1.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/SETTINGS/1.0.0 http://maven.apache.org/xsd/settings-1.0.0.xsd"> <localRepository>D:\Program Files\apache-maven-3.5.0\repository</localRepository> <mirrors> <mirror> <id>alimaven</id> <name>aliyun maven</name> <url>http://maven.aliyun.com/nexus/content/groups/public/</url> <mirrorOf>central</mirrorOf> </mirror> </mirrors> </settings>
3. 安装IDE工具
1. 安装python IDE, 建议安装PyCharm专业版.
2. 安装java IDE, 建议安装IntelliJ IDEA
1. 下载idea,并进行破解 2. 基本配置 2.1 修改字体, 设置快捷键 2.2 maven仓库配置: Maven home directory 和 User settings file 3. 基本使用 系统配置: Ctrl + Alt + S 导包提示: Alt + Enter 修改编码 4. 安装插件: lombok 5. 常用的maven功能: clean, compile, package
4. 经验总结
1. 测试需要使用开发的java代码来完成测试时, 别忘记向开发索要pom文件.因为pom文件中会包含很多依赖包.
2. python版本和java版本必须是相同的位数. 即同为32位或同为64位.
3. 被引用的jar包在打包时,务必将依赖关系一并打包.否则提示找不到类.
4. .class文件生成jar包方式:
方式1: jar cvf recvThird.jar com 其中com是一个文件夹. 打包时注意文件夹的层级关系. 对于有很多依赖jar文件时,难度大
方式2: 通过maven来package, 注意此时配置好build.务必保证是带依赖打包, 即 jar-with-dependencies. 建议使用这种方式.
<build> <plugins> <plugin> <artifactId>maven-assembly-plugin</artifactId> <version>2.6</version> <configuration> <descriptorRefs> <descriptorRef>jar-with-dependencies</descriptorRef> </descriptorRefs> <archive> <manifest> <mainClass>com.thrid.wstest.WstestApplication</mainClass> </manifest> </archive> </configuration> <executions> <execution> <id>make-assembly</id> <phase>package</phase> <goals> <goal>single</goal> </goals> </execution> </executions> </plugin> </plugins> </build>
5. jar包因为存在中文, python调用时出现乱码. 将IDEA中的编码都改成了uft-8,但依然不能解决乱码问题. 最终通过python调用jar时指定编码集解决(-Dfile.encoding=UTF8)
if not jpype.isJVMStarted(): jpype.startJVM( jpype.get_default_jvm_path(), jvm_arg, "-Dfile.encoding=UTF8", "-ea", '-Xmx{}m'.format(max_memory) )