Я использую скрипт 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 плагин для предварительной сборки / пользовательской сборки, чтобы выполнить копирование.
У кого-нибудь есть идея получше?