2009-11-19 7 views
2

J'ai du mal à faire fonctionner correctement jython lorsqu'il est exécuté à partir d'un plugin Eclipse. J'ai une usine d'objets simple qui charge un module python conforme à une interface Java. Tout cela fonctionne très bien en mode autonome. Cependant, quand je le paquet comme un plugin eclipse, j'obtiens une erreur différente basée sur quelques variables:Utilisation de Jython depuis le plugin Eclipse

Étant donné que mon paquet java est com.foo.

1) Si je cours sans modifier les chemins, je reçois: "Aucun module nommé foo"

2) Si je puis ajouter mes pots de java à l'aide sys.path:

PythonInterpreter interp = new PythonInterpreter(null, new PySystemState()); 
PySystemState sys = Py.getSystemState(); 
sys.path.append(new PyString("myjar...")); 

Je reçois:

a) constructeur de mon module python est appelé (impression dans la constr apparaît)
b) Je reçois un PySingleton retour de l'appel à tojava. Le champ de nom est "Erreur".

3) À ce stade, j'essaie de rendre le chemin de classe exactement le même dans Eclipse que Standalone, donc j'ajoute mes jars au classpath à l'exécution juste avant l'appel de l'interpréteur python.

Je reçois mon message d'erreur préféré: SystemError: initialisation du proxy automatique ne doit se produire sur les classes proxy

Ce me rend fou est. J'ai été impressionné par la rapidité avec laquelle je suis arrivé en mode autonome. Est-ce que courir sous Eclipse devrait être aussi différent? Je crois que cela ne devrait être qu'une question de classe, mais jusqu'à présent, cela ne semble pas être le cas.

Répondre

5

Enfin, imaginez celui-ci. Voici ce que je devais faire:

1) J'ai utilisé le JSR223 ScriptEngine au lieu de PythonInterpreter:

engine.get(module_name); //gets the class object of the module getConstructors[0].newInstance(null) on the class to get an object
//cast it to your interface!

2) Assurez-vous que votre plugin Eclipse n'est pas emballé comme un pot (à 3,5 set Eclipse-BundleShape: dir)
3) Ajoutez jython.jar et tous les chemins où vous voulez localiser les modules à votre Runtime Classpath dans le manifeste.

Espérons que cela aide quelqu'un.

+2

Votre question n'était pas liée à mon problème mais 3) Ajoutez jython.jar et tous les chemins où vous voulez trouver des modules à votre Runtime Classpath dans le manifeste. ce commentaire m'a beaucoup aidé en utilisant des modules python dans eclipse. –