2009-07-02 13 views
3

Mein erster Versuch bei Jython ist ein Java/Jython-Projekt Ich schreibe in Eclipse mit Pydev..Class-Datei von Jython mit Pydev

Ich habe ein Java-Projekt erstellt und dann ein Pydev-Projekt vom RightClick-Projekt >> pydev >> gesetzt als ... Sie bekommen die Idee. Ich fügte dann zwei Quellordner hinzu, einen für java und einen für jython, und jeder Quellordner hat ein Paket. Und ich habe jeden Ordner als Build-Pfad für das Projekt festgelegt. Ich schätze, ich lasse Sie das alles wissen, also können Sie mir hoffentlich sagen, ob ich das Projekt korrekt eingerichtet habe.

Aber die eigentliche Frage ist: Wie bekomme ich meinen Jython-Code in eine Klassendatei gemacht, damit der Java-Code es verwenden kann? Die bevorzugte Methode wäre, dass Eclipse/Pydev dies automatisch für mich tun würde, aber ich kann es nicht herausfinden. Etwas, das im jython-Benutzerhandbuch erwähnt wird, impliziert, dass es möglich ist, aber ich kann nirgends Informationen darüber finden.

EDIT: Ich habe einige Informationen gefunden here und here, aber die Dinge gehen nicht zu glatt.

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

+0

Ist die Stelle, an der die Klassendateien von jythonc auf Ihrem Klassenpfad generiert werden? – seth

+0

Ich habe eine Antwort [hier] [1] zu einer verwandten Frage eingereicht. [1]: http: // Stapelüberlauf.com/questions/2583192/running-jython-bytecode-mit-java/15939006 # 15939006 –

Antwort

0

Nach dem Tutorial "Zugriff auf Jython von Java ohne jythonc verwenden" wurde es möglich, die jython-Module in Java-Code zu verwenden. Der einzige knifflige Punkt ist, dass die * .py-Module nicht in * .class-Dateien kompiliert werden. Es stellt sich heraus, dass es exotisches Scripting in Java ist. Die Leistung kann natürlich gegenüber jythonc'ed py-Modulen abnehmen, aber wie ich von den jython-Community-Seiten erfahren habe, werden sie jythonc nicht unterstützen (und haben es tatsächlich bereits in jython2.5.1 abgelegt).

Also, wenn Sie sich entscheiden, nicht-jythonc Ansatz zu folgen, ist das obige Tutorial perfekt. Ich hatte das JythonFactory.java Code ein wenig zu ä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 in ein anderes Projekt namens Clamp abgespalten wurde, aber mit dieser sagte ...

... Sie können Ihre python-Skripte vorge kompilieren Class-Dateien mit:

jython [jython home] /Lib/compileall.py [das Verzeichnis, in dem Sie Ihre python-Code halten]

Quelle - Jython Newsletter, March 2009

Wenn ich es einen Ordner mit Python gespeist 2.7 Code (es zu wissen, in Jython 2.5 scheitern würde) es ausgegeben haben eine .class-Datei, auch wenn dies nicht der Fall Funktion. Versuchen Sie das mit Ihren Jython-Skripten. Wenn es funktioniert, lass es uns wissen, denn ich werde bald da sein, wo du bist.

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