在python中引用jar包


在本文中,首先創建一個maven項目,然后打包成jar包,在python中調用jar包,執行java類方法。

1.在eclipse中創建maven項目

我這里創建一個普通java項目,擇選擇 “maven-archtype-quickstart” 即可

 

2.創建后,在項目根目錄下會有一個pom.xml

3.編寫pom文件,加載項目所需要的依賴,我的pom.xml 如下:

<project xmlns="http://maven.apache.org/POM/4.0.0"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>com.rfchina</groupId>
    <artifactId>utils</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <packaging>jar</packaging>

    <name>utils</name>
    <url>http://maven.apache.org</url>

    <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    </properties>

    <dependencies>
       <!-- 
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>3.8.1</version>
            <scope>test</scope>
        </dependency>
         -->
        <dependency>
            <groupId>commons-codec</groupId>
            <artifactId>commons-codec</artifactId>
            <version>1.11</version>
        </dependency>

    </dependencies>
    
    <!--  maven打包構建時,使用參數 assembly:assembly 則會加載依賴包   -->
    <build>
        <plugins>
            <plugin>
                <artifactId>maven-assembly-plugin</artifactId>
                <version>2.2</version>
                <configuration>
                    <archive>
                        <manifest>
                            <!-- 我運行這個jar所運行的主類 -->
                            <mainClass>com.rfchina.utils.RsaSign</mainClass>
                        </manifest>
                    </archive>
                    <descriptorRefs>
                        <descriptorRef>
                            <!-- 必須是這樣寫 -->
                            jar-with-dependencies
                        </descriptorRef>
                    </descriptorRefs>
                </configuration>
            </plugin>
        </plugins>
    </build>
</project>

4.編寫java代碼前,這里我們先安裝一下依賴包:

pom.xml 右鍵->Run As ->Maven Install

運行后,可以在Maven Dependencies中看到已經下載並且引入的maven依賴包

5.開始編寫java代碼

Base64Utils.java

package com.rfchina.utils;

import org.apache.commons.codec.binary.Base64;
public class Base64Utils
{
    /**
     * 使用Base64加密字符串
     * @return 加密之后的字符串
     * @exception Exception
     */
    public static String encode(byte[] data){
        Base64 base64 = new Base64();
        String encodedData = base64.encodeAsString(data);
        return encodedData;
    }
    /**
     * 使用Base64解密
     * @return 解密之后的字符串
     * @exception Exception
     */
    public static byte[] decode(String data){
        Base64 base64 = new Base64();
        byte[] decodedData = base64.decodeBase64(data);
        return decodedData;
    }
}

RsaSign.java

package com.rfchina.utils;

import java.security.KeyFactory;
import java.security.PrivateKey;
import java.security.Signature;
import java.security.spec.PKCS8EncodedKeySpec;

/**
 * @ClassName: RsaSign
 * @Description: RSA 私鑰簽名
 * @author Milton
 * @date 2018年9月4日
 *
 */
public class RsaSign {
    private static final String SIGNATURE_ALGORITHM = "SHA256withRSA";
    private static final String KEYPAIR_GENERATOR_ALGORITHM = "RSA";
    // 商戶私鑰加密接口請求參數
    final String privateKey = "MIICdQIBADANBgkqhkiG9w0BAQEFAASCAl8wggJbAgEAAoGBAMJSignj27blOez6i6YCM1b4AC9CtgubD0B9gmTskENJNxzg9i59hCpIibkTg1rvMDdSuKFvlHtxkOgSID8Qgm1h3AxpMKpYT58FnApqY7img85xEZo+uNB1GHTbrhuCGQFf2P8U1hE01Y6miFsESsFTQ09BpNy+1wPKt/KbW75fAgMBAAECgYA/04iPkw4Z1tTd57Vyw4pFaJP28fyFd1rdHdx0ddc0opm9nI5/2q5MjSLfbW9ZsPKvWTZXoCSvHzAvabS5whx0aYpZlfWCd6QRNAuoaP0FSCWH/ty7I3nHQJK8LQQhP3nfekAfiyMpvGGK4KrderEP37/MG1202iycR4X6fZnMkQJBAPqaKChFYAqStADg3owoux5Gc3rAf2zRXIBZXPNEYgE0owpwtP2tYPdcIy9l01Yv1nIDr2O7x8JrbUOuNe/4/4sCQQDGggz4XHqZAwDBvea3g9FBCnojzyqQMtHO54TxL6NXIr7maBoBb0XCXuh6Uz2F7O8an1Bi/adQXVXUhvErG9b9AkBJhU6AuhG6KF4M3+wKnKyA7lRU0ALSTv3fXdhKOmaySdoHZxeCUQpgp7Re5HXDFFfKrVAYZ2/slw3ATGzgkWGPAkBW5b1px4n/i3n8VfY2paSntT9sh5bZUvXXfjALKNB3J4Wr9SxVLnG6ObPJQMEw7FxrKgyVmPZyTrlw9LWEKoa9AkBz9OU/BFhg9wIcHiFWQSOQdKQ4touyTF3T3EbROt34oXEhp1b3/eEGlwvNF2dUrfi39b5rKph63G6d3rxb+GVG";

    public String rsa_sign(String encryData) {
//        String encryData_example="app_id=12996762&app_secret=902ac71d8fdbdfc097f53070afbcaefb&platform=1&sign_type=RSA&timestamp=1536032317";
        String sign = "";
        try {
            byte[] buffer = Base64Utils.decode(privateKey);
            PKCS8EncodedKeySpec keySpec = new PKCS8EncodedKeySpec(buffer);
            KeyFactory keyFactory = KeyFactory.getInstance(KEYPAIR_GENERATOR_ALGORITHM);
            PrivateKey prK = keyFactory.generatePrivate(keySpec);
            Signature signature = Signature.getInstance(SIGNATURE_ALGORITHM);
            signature.initSign(prK);
            signature.update(encryData.getBytes());
            sign =  Base64Utils.encode(signature.sign());
        } catch (Exception e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        return sign;
    }

    public static void main(String[] args) {
        // TODO Auto-generated method stub

        RsaSign rs = new RsaSign();
        String encryData = "app_id=12996762&app_secret=902ac71d8fdbdfc097f53070afbcaefb&platform=1&sign_type=RSA&timestamp=1536032317";
        System.out.println(rs.rsa_sign(encryData));

    }
}

其中RsaSign是我主要想要調用的工具類。

6.打包即可,這里注意,打包時需要將maven依賴包“commons-code-1.11.jar”也打進來,顧需要通過插件“maven-assembly-plugin”,前面已經加入在pom中了。

pom.xml-》右鍵-》Run AS -》Maven Build...-》指定Goals參數:assembly:assembly -》Run

 

 

7.打包成功后,在target目錄下可以得到需要的jar包,如

 

8.將jar包放到python項目下,下面我們開始編寫python代碼,進行jar包的引用

jar_utils.py

import jpype


def get_rsa_sign(sign_raw):
    """
    調用java jar包,對入參進行rsa簽名
    :param sign_raw:待簽名字符串
    :return:signature:簽名后的加密字符串
    """
    # 啟動JVM
    jvmPath = jpype.getDefaultJVMPath()
    # 加載jar包
    jpype.startJVM(jvmPath, "-ea", "-Djava.class.path=utils-0.0.1-SNAPSHOT-jar-with-dependencies.jar")
    # 指定main class
    JDClass = jpype.JClass("com.rfchina.utils.RsaSign")
    # 創建類實例對象
    jd = JDClass()
    # 引用jar包類中的方法 rsa_sign
    signature = jd.rsa_sign(sign_raw)
    # 關閉JVM
    jpype.shutdownJVM()
    return signature


if __name__ == '__main__':
    sign_raw = "app_id=68613717&app_secret=039b8b6f1544f62dace6fe53e4c380be&platform=1&sign_type=RSA&timestamp=1536039464"
    print("rsa 簽名結果:",get_rsa_sign(sign_raw))

運行結果如下:

JVM has been shutdown
rsa 簽名結果: Z8OqE9ldgp7+gG6+fFm/N17pqQAIvGzQY7VztYzWgsSEYiyi7g9piHPIZqB22ekRZfzPFpOXM0lXc+GDjZWYwN+0XJGvJYQMWDGuTgHcf8c6VhiiOgUHXtptHG4Op+06v3SJ1iNaEy8F5tH9Y74X6GhTqR28SHuW3sdep1AhExY=

 

***微信掃一掃,關注“python測試開發圈”,了解更多測試教程!***


免責聲明!

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



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