Похоже, что я пропускаю что-то.
Чтобы использование Jython выполнило мой код Python в Java, файлы байт-кода Java сгенерированы (test.py-> test@py.class).
Я могу выполнить эти классы непосредственно с помощью Java?
Другими словами, я хочу сделать это:
$ java test@py [additional cp args]
работа.
Намерение: написание кода Python и не необходимость отдать исходный код.
Если ваша единственная задача - распространять приложение без предоставления исходного кода, вы можете воспользоваться такими инструментами, как cx_freeze и py2exe в Windows и py2app на Mac.
Эти инструменты могут компилировать файлы .py в байт-код.
См. FAQ - Встраивание Jython .
Обратите внимание, что jythonc
больше не поддерживается :
jythonc не обрабатывает генераторы, его сложно отлаживать и улучшать. В настоящее время мы думаем о добавлении возможностей к самому jython для генерации байт-кода из файлов py и запуска этих статически скомпилированных элементов, а не к подходу jythonc для создания классов Java, которые работают как базовый код Python. Текущее мышление выглядит следующим образом:
- Превратите классы Python в классы Java без интерфейса или класса Java, используя аннотации функций, чтобы указать информацию о статическом типе Java
- статически скомпилировать прокси-классы для классов Python, которые расширяют классы Java
- удалить код из ядра, предназначенный только для поддержки jythonc
В примере предлагается специальная аннотация для любого метода в классе Python, который должен быть виден из Java:
class Simple(object):
@java
def __init__(self):
@java(String, String)
def firstWord(self, param):
return param.split(' ')[0]