Как поделиться общим кодом Python / Jython между Python и Java-проектом с Pydev / Eclipse? - PullRequest
2 голосов
/ 30 марта 2011

Я использую скрипт Jython, встроенный в проект Java, разработанный в Eclipse с установленным Pydev. Теперь я хотел бы повторно использовать этот скрипт в другом чистом проекте Python. Есть ли способ сделать это чисто, не копируя скрипт?

В настоящее время у меня есть один Java-проект с каталогами src/ (содержит источники Java) и src-py/ (содержит источник Jython), а также добавлен «фасет» Pydev. Код Java вызывает в коде Jython что-то вроде этого:

// evaluate the Jython class
PythonInterpreter interpreter = new PythonInterpreter();
InputStream resourceAsStream = MyEclipsePlugin.getResource("/src-py/MyJythonCode.py");
interpreter.execfile(resourceAsStream);

// create an instance of the Jython class and retrieve a Java interface reference to it
interpreter.exec("x = MyJythonClass()");   // MyJythonClass implements MyJavaInterface
Object x = interpreter.get("x").__tojava__(MyJavaInterface.class);
return (MyJavaInterface) x;

Это работает, но, очевидно, довольно уродливо. Из того, что я прочитал, когда-то был "jythonc" - который, вероятно, ближе к тому, что мне нужно - но он, кажется, устарел, и вы не рекомендуется его использовать. Без этого мне нужен фактический исходный код Jython во время выполнения, чтобы скомпилировать его в класс JVM. Поэтому приведенный выше шаблон, который, к сожалению, не поддерживает загрузку модулей, поэтому я сейчас работаю со всем в одном файле .py. Я думаю, что в конечном итоге я мог бы перейти к выполнению interpreter.execfile() несколько раз, но я не совсем понял, как это сделать, когда существуют взаимозависимости между модулями.

Затем я попытался создать новый проект Jython, чтобы переместить мой MyJythonCode.py в. К сожалению, я не могу добавить проекты Pydev / Jython в качестве ссылок проектов на проекты Java, поэтому я не уверен, как интегрировать это в проект Java.

Параметры, которые я сейчас вижу, ни один из которых мне не нравится:

  • Скопируйте MyJythonCode.py и измените их одновременно.
  • Делайте некоторые интересные вещи из svn: externals, которые копируют меня при каждом обновлении.
  • Попробуйте найти в Eclipse плагин для предварительной сборки / пользовательской сборки, чтобы выполнить копирование.

У кого-нибудь есть идея получше?

1 Ответ

0 голосов
/ 22 августа 2013

Я думаю, что правильным было бы иметь отдельный проект для того содержимого, от которого зависят оба ...

т.е:.

Создайте этот проект как проект Java и добавьте в него свойства pydev (т.е. щелкните правой кнопкой мыши проект> pydev> установить как проект pydev).

Затем в этом проекте вы можете создать классы java-wrapper, а также настроить исходные пути для pydev (и добавить этот проект в качестве ссылки на другие проекты: щелкните правой кнопкой мыши другие проекты> свойства> ссылки на проекты).

Таким образом, все должно работать правильно как для Java, так и для Python.

...