Frage an jython, pydev, java, python, eclipse – .class datei aus jython mit pydev

3

Mein erster Versuch mit Jython ist ein Java / Jython-Projekt, das ich mit pydev in Eclipse schreibe.

Ich habe ein Java-Projekt erstellt und es dann mit dem RightClick-Projekt >> pydev >> zu einem pydev-Projekt gemacht, da ... Sie die Idee haben. Ich habe dann zwei Quellordner hinzugefügt, einen für Java und einen für Jython, und jeder Quellordner hat ein Paket. Und ich habe jeden Ordner als Erstellungspfad für das Projekt festgelegt. Ich nehme an, ich lasse Sie das alles wissen, damit Sie mir hoffentlich sagen können, ob ich das Projekt richtig eingerichtet habe oder nicht.

Die eigentliche Frage ist jedoch:Wie kann ich meinen Jython-Code in eine Klassendatei umwandeln, damit der Java-Code ihn verwenden kann? Die bevorzugte Methode wäre, dass Eclipse / Pydev dies automatisch für mich erledigt, aber ich kann es nicht herausfinden. Etwas, das im Jython-Benutzerhandbuch erwähnt wird, impliziert, dass es möglich ist, aber ich kann nirgendwo Informationen dazu finden.

EDIT: Ich habe einige Informationen gefundenHier undHier, aber die Dinge gehen nicht zu glatt.

Ich habe die Anleitung im zweiten Link ziemlich genau befolgt, aber ich kann nicht herausfinden, wie man Jythonc dazu bringt, einen Konstruktor für meine Python-Klasse zu erstellen.

Ich habe eine Antwort [hier] [1] auf eine verwandte Frage eingereicht. [1]stackoverflow.com/questions/2583192/… Robert Fleming
Befindet sich in Ihrem Klassenpfad der Ort, an dem die Klassendateien von jythonc generiert werden? seth

Deine Antwort

2   die antwort
0

Nach dem Tutorial "Von Java aus auf Jython zugreifen, ohne Jythonc zu verwenden" wurde es möglich, die Jython-Module in Java-Code zu verwenden. Der einzige knifflige Punkt ist, dass die * .py-Module nicht zu * .class-Dateien kompiliert werden. Es stellt sich also heraus, dass es sich in Java um exotisches Scripting handelt. Die Leistung kann sich natürlich im Vergleich zu jythonc-basierten Py-Modulen verschlechtern, aber wie ich von den Jython-Community-Seiten erfahren habe, werden sie Jythonc nicht unterstützen (und haben es bereits in Jython2.5.1 gelöscht).

Wenn Sie sich also für einen Nicht-Jythonc-Ansatz entscheiden, ist das obige Tutorial perfekt. Ich musste den JythonFactory.java-Code ein wenig ändern:

String objectDef = "=" + javaClassName + "(your_constructor_params here)";
try {
       Class JavaInterface = Class.forName(interfaceName);

       System.out.println("JavaInterface=" + JavaInterface);

       javaInt = 
            interpreter.get("instance name of a jython class from jython main function").__tojava__(JavaInterface);
    } catch (ClassNotFoundException ex) {
        ex.printStackTrace();  // Add logging here
    }
5

Jythonc existiert nicht mehr, es wurde in ein anderes Projekt namens "Forked" verschobenKlemme, aber damit gesagt ...

... Sie können Ihre Python-Skripte in .class-Dateien vorkompilieren, indem Sie Folgendes verwenden:

jython [jython home] /Lib/compileall.py [das Verzeichnis, in dem Sie Ihren Python-Code aufbewahren]

Quelle -Jython Newsletter, März 2009

Als ich ihm einen Ordner mit Python fütterte2.7 Code (wissend, dass er in Jython fehlschlagen würde)2.5) gab eine .class-Datei aus, obwohl sie nicht funktioniert. Versuchen Sie das mit Ihren Jython-Skripten. Wenn es funktioniert, lassen Sie es uns bitte wissen, denn ich bin bald bei Ihnen.

Sobald Sie so weit sind, ist es nicht schwierig, Ihre Befehlszeilenanweisung in ein externes Tool in PyDev zu konvertieren, das bei Bedarf aufgerufen werden kann.

Verwandte Fragen