2010-11-18 42 views
1

J'avais une question sur la différence d'exécution de deux commandes liées à jython. J'ai des problèmes avec les pilotes classpath et db.Problème Jython avec les chemins de classes

Ce qui fonctionne pour moi procédez comme suit: Jython -J-classpath ../lib/mysql-connector-java-5.1.7.jar test.py/home/test/données

Course à commande tout fonctionne comme prévu, donc je voulais combiner mes scripts pour être exécuté comme un pot afin de ne pas avoir besoin de Jython. Une fois que j'ai terminé la création de mon pot tout fonctionne jusqu'à ce qu'il arrive au point où j'ai besoin du pilote et renvoie une erreur de pilote non trouvé.

je lance ceci comme suit: java -cp ../lib/mysql-connector-java-5.1.7.jar mytest.jar test.py/home/test/données

Je suis Je ne suis pas sûr de comprendre pourquoi l'un fonctionnerait et l'autre ne fonctionnerait pas.

Merci

Répondre

0

Je l'ai travail, mais je ne sais pas pourquoi cela fonctionne. J'espère que quelqu'un peut m'expliquer. J'ai reconstruit mon pot mytest.jar et inclus les classes nécessaires dans le mainifest lors de la construction du fichier jar et cela me permet de l'utiliser en Java comme: java -cp mytest.jar test.py/home/test/data

Pourquoi inclure le classpath dans la mainfest au lieu de la ligne de commande produirait des résultats différents?

+0

Lorsque vous exécutez des programmes Java via Ant, beanshell, Jython ou autre, dans certains cas, les classes sont chargées dans un chargeur de classe personnalisé au lieu du "classloader par défaut". Par exemple, en démarrant un script beanshell puis en chargeant dynamiquement le jar dans le script, le .jar est chargé dans un chargeur de classe personnalisé et les classes qui doivent être chargées avec la méthode Class.forname, comme les pilotes JDBC, auront donc des problèmes dans l'environnement . Tant que vous chargez des choses dans le chargeur de classe par défaut, vous n'aurez pas de problèmes. – djangofan