坑點記錄
問題: 通過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) )