2010-11-18 6 views
1

Ich hatte eine Frage über den Unterschied der Ausführung von zwei Befehlen im Zusammenhang mit Jython. Ich habe Probleme mit Classpath- und Db-Treibern.Jython-Problem mit Klassenpfaden

Was funktioniert für mich ist dabei die folgende: jython -J-Classpath ../lib/mysql-connector-java-5.1.7.jar test.py/home/test/Daten

ausgeführt wird, Befehl alles läuft wie erwartet, also wollte ich meine Skripte kombinieren, um als jar ausgeführt zu werden, so dass jython nicht benötigt wird. Sobald ich fertig bin, mein Krug zu erstellen, läuft alles, bis es zu dem Punkt kommt, wo ich den Treiber benötige und einen Treiber, der nicht gefunden wird, Fehler zurückgibt.

Ich betreibe dies wie folgt: java -cp ../lib/mysql-connector-java-5.1.7.jar mytest.jar test.py/home/test/Daten

Ich bin nicht sicher, ich verstehe, warum man arbeiten würde und der andere würde nicht funktionieren ?.

Dank

Antwort

0

Ich habe es funktioniert, aber ich bin nicht sicher, warum es funktioniert. Ich hoffe, dass mir jemand erklären kann. Ich habe mein mytest.jar jar neu erstellt und die benötigten Klassenpfade in das Mainifest eingefügt, als ich das jar erstellte und dies scheint mir die Verwendung in Java zu ermöglichen: java -cp mytest.jar test.py/home/test/data

Warum würde das Einbeziehen des Klassenpfades in das Mainfest statt in die Befehlszeile unterschiedliche Ergebnisse liefern?

+0

Wenn Sie Java-Programme über Ant, Beanshell, Jython oder was auch immer ausführen, werden in einigen Fällen Klassen in einem benutzerdefinierten Classloader anstelle des "Standard Classloader" geladen. Wenn Sie zum Beispiel ein Beanshell-Skript starten und anschließend das Jar innerhalb des Skripts dynamisch laden, wird die JAR-Datei in einen benutzerdefinierten Classloader geladen, und Klassen, die mit der Class.Forname-Methode geladen werden müssen, haben daher Probleme in der Umgebung . So lange Sie Sachen in den Standard Classloader laden, haben Sie keine Probleme. – djangofan