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
View Code

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>
View Code

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
View Code

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>
View Code

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)
    )
View Code

 

posted @ 2020-04-04 00:05  后来者2012  阅读(1222)  评论(0编辑  收藏  举报