簡體   English   中英

Python Jpype 在 JAR 文件中看不到 Java 類

[英]Python Jpype can't see Java classes in JAR file

我正在嘗試解決應該是一個簡單的問題,但我遺漏了一些東西。 我有一個非常簡單的 Java 類:

package blah.blah;

public class Tester {
    public String testMethod1() { return "GotHere"; }
    public String testMethod2() { return "GotHereToo"; }
} // Tester

我試圖讓它加載到 JPype:

import jpype
import jpype.imports
from jpype.types import *

path_to_jvm = "C:\\Java\\OracleJDK-8_241_x64\\jre\\bin\\server\\jvm.dll"
jpype.startJVM(path_to_jvm, classpath=["C:\\Users\\Administrator\\eclipse-workspace\\JpypeTest\\src;"])

from java.lang import System
print(System.getProperty("java.class.path"))

from java.io import ObjectInputStream
from blah.blah import Tester

tester = Tester()
print(tester.testMethod1())
print(tester.testMethod2())

jpype.shutdownJVM()

當我使用上面的代碼直接加載類時,一切正常。 當我嘗試讓它通過 JAR 加載類文件時,它停止工作。

jpype.startJVM(path_to_jvm, classpath=["C:\\Users\\Administrator\\JpypeTest.jar;"])

我得到的錯誤是:

Traceback (most recent call last):
  File ".\jpype_test.py", line 16, in <module>
    from blah.blah import Tester
ModuleNotFoundError: No module named 'blah'
PS C:\Users\Administrator> python .\jpype_test.py
C:\Users\Administrator\JpypeTest.jar;
Traceback (most recent call last):
  File ".\jpype_test.py", line 16, in <module>
    from blah.blah import Tester
ModuleNotFoundError: No module named 'blah'

我使用 JAR 導出從 Eclipse 2020/09 和命令行使用以下幾種不同的方式構建了 JAR 文件:

C:\Users\Administrator\eclipse-workspace\JpypeTest\src>"C:\Java\OracleJDK-8_241_x64\bin"\jar cf C:\Users\Administrator\JpypeTest.jar blah\blah\*.class

我已經確認 JVM 和 python 解釋器都是 64 位的。 我也已盡力確保 Eclipse、命令行和 Python 之間的 JVM 完全相同。

從我所見,無論我如何構建 JAR,它看起來都很好。 它包含 blah\\blah 目錄和其下的 Tester.class 文件。 清單是 JAR 中唯一的其他文件。

我還嘗試在不同的目錄級別(即一級 blah 目錄和沒有 blah 目錄級別)創建帶有類文件的 JAR 文件。

以下是python軟件的版本:

Python 3.8.5 (default, Sep  3 2020, 21:29:08) [MSC v.1916 64 bit (AMD64)] :: Anaconda, Inc. on win32
Package      Version
------------ -------------------
certifi      2020.6.20
JPype1       1.0.2
pip          20.2.3
setuptools   50.3.0.post20201006
wheel        0.35.1
wincertstore 0.2

我顯然有基礎管道工作,因為它可以看到類文件。 關於為什么 JAR 失敗的任何想法?

非常感謝您的考慮。

檢查您是否沒有名為“blah”的目錄,python 會在該目錄中查找模塊。 這將隱藏您的 Java 類,根據https://jpype.readthedocs.io/en/latest/userguide.html#importing-java-classes

處理導入 Java 模塊時的一個重要警告。 Python 總是在調用 Java 導入器之前將本地目錄作為模塊導入。 因此,任何名為 java、com 或 org 的目錄都將隱藏相應的 Java 包。 我們建議不要將目錄命名為 java 或頂級域。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM