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

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM