Dies ist eine Methode zum Importieren der Klasse in die JAR-Datei direkt aus dem Python-Skript.
Dies hängt nicht von CLASSPATH ab. Wenn Sie also eine Umgebung haben, in der Java und Jython ausgeführt werden können Es macht es möglich, die Integration zwischen Python und Java einfach zu verpacken.
Dies ist beispielsweise nützlich, wenn Sie Javas Legacy und SQLite gleichzeitig in Python verwenden möchten. Jython ist ein Standardmodul und unterstützt SQLite nicht. Daher ist ein JDBC-Treiber erforderlich. Wenn Sie die JAR-Datei des JDBC-Treibers direkt aus dem Python-Skript lesen können, Sie können Java-Klassen und SQLite aus Python verwenden, indem Sie einfach die erforderlichen Dateien eingeben.
test.py
import.sys
sys.path.append("/path/to/hogehoge.jar")
import Hogehoge
Es funktioniert mit! Es gab Informationen, dass es nutzlos war. Es scheint, dass Sie die Klassen darin laden müssen, nicht nur durchlaufen müssen.
ClassPathHacker
ClassPath Hacker scheint eine Lösung zu sein. http://www.jython.org/jythonbook/en/1.0/appendixB.html#working-with-classpath
Das Folgende ist ein Beispiel für das Aufrufen des JDBC-Treibers von SQLite aus Jython.
test2.py
from java.lang import Class
from java.sql import DriverManager
class classPathHacker:
import java.net.URLClassLoader
def addFile(self, s):
sysloader = self.java.lang.ClassLoader.getSystemClassLoader()
sysclass = self.java.net.URLClassLoader
method = sysclass.getDeclaredMethod("addURL", [self.java.net.URL])
method.setAccessible(1)
f = self.java.io.File(s)
method.invoke(sysloader, [f.toURL()])
c = classPathHacker()
c.addFile("/path/to/sqlite-jdbc.jar")
jdbc_url = "jdbc:sqlite:/path/to/database.db"
driver = "org.sqlite.JDBC"
Class.forName(driver).newInstance()
con = DriverManager.getConnection(jdbc_url)
#Unten
Ich bin nicht sicher, aber mache URLClassLoader.addURL zwangsweise zugänglich Es sieht so aus, als würden Sie eine Klasse laden.