Il s'agit d'une méthode pour importer la classe dans le fichier jar directement à partir du script Python.
Cela ne dépend pas de CLASSPATH, donc si vous avez un environnement dans lequel Java et Jython peuvent s'exécuter Il permet de conditionner facilement l'intégration entre Python et Java.
Ceci est utile, par exemple, lorsque vous souhaitez utiliser l'héritage de Java et SQLite en même temps dans Python. Jython est un module standard et ne prend pas en charge SQLite, donc un pilote JDBC est requis, Si vous pouvez lire le fichier jar du pilote JDBC directement à partir du script Python, Vous pouvez utiliser les classes Java et SQLite de Python en ajoutant simplement les fichiers requis.
test.py
import.sys
sys.path.append("/path/to/hogehoge.jar")
import Hogehoge
Cela fonctionne avec! Il y avait des informations selon lesquelles c'était inutile. Il semble que vous deviez charger les classes dedans, pas simplement les transmettre.
ClassPathHacker
ClassPath Hacker semble être une solution. http://www.jython.org/jythonbook/en/1.0/appendixB.html#working-with-classpath
Voici un exemple d'appel du pilote JDBC de sqlite à partir de 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)
#Au dessous de
Je ne suis pas sûr, mais rendre URLClassLoader.addURL accessible de force On dirait que vous chargez une classe.
Recommended Posts