Pythonスクリプトからjarファイル中のクラスを直接importする方法です。
CLASSPATHに依存しないので、JavaとJythonが動く環境があれば
PythonとJavaの連携を簡単にパッケージ化することが可能になります。
例えば、PythonでJavaの遺産とSQLiteを同時に使いたい時などに便利です。
Jythonは標準モジュールでSQLiteをサポートしていないのでJDBCドライバが必要ですが、
直接PythonスクリプトからJDBCドライバのjarファイルを読み込めるようにすれば、
必要なファイルを放り込むだけでPythonからJavaクラスとSQLiteを使用できます。
sys.pathをいじる
import.sys
sys.path.append("/path/to/hogehoge.jar")
import Hogehoge
で動くよ!という情報がありましたがダメでした。
単にパスを通すだけじゃなくて、そのなかのクラスを読み込まなければいけないようです。
ClassPathHacker
ClassPathHackerというのがひとつの解決法らしいです。
http://www.jython.org/jythonbook/en/1.0/appendixB.html#working-with-classpath
以下、sqliteのJDBCドライバをjythonから呼び出す一例です。
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)
# 以下ごにょごにょ
よくわかりませんが、URLClassLoader.addURLを無理矢理アクセス可能にして
クラスを読み込んでるみたいです。