2015-04-03 3 views
2

Я пишу проект Jython для создания текстового редактора. Модель данных полностью написана в Python и использует внешние библиотеки, такие как нос, jinja и ply. GUI для текстового редактора использует библиотеки Java Swing. Я пытаюсь построить этот проект с Maven, и узнал о this useful plugin, которые я включил в своем файле, так как п:Как импортировать модули Python с Maven в проекте Jython?

  <plugin> 
       <groupId>net.sf.mavenjython</groupId> 
       <artifactId>jython-compile-maven-plugin</artifactId> 
       <version>1.1</version> 
       <executions> 
        <execution> 
         <phase>package</phase> 
         <goals> 
          <goal>jython</goal> 
         </goals> 
        </execution> 
       </executions> 
       <configuration> 
        <libraries> 
         <param>nose</param> 
         <param>ply</param> 
         <param>jinja</param> 
        </libraries> 
       </configuration> 
      </plugin> 

Когда я mvn package проекта, я получаю сообщение об успешной сборке и jar, и все модули Python сохраняются в папке, созданной плагином Maven выше в target/classes/Lib. До сих пор так хорошо, но когда я пытаюсь запустить банку, я не могу сделать мой код Python найти библиотеки Python и получить это сообщение об ошибке:

java -jar target/text_editor-0.0.1-SNAPSHOT.jar 
Exception in thread "main" Traceback (most recent call last): 
    File "<string>", line 2, in <module> 
    File "<string>", line 2, in <module> 
    File "__pyclasspath__/text_editor/main.py", line 13, in <module> 
    File "__pyclasspath__/pymodel/pyfile.py", line 1, in <module> 
    File "__pyclasspath__/pymodel/pyflex.py", line 1, in <module> 
ImportError: No module named ply 

линия ошибки быть import ply.lex as lex

Есть ли что-то осталось сделать в моей конфигурации плагина? Или что-то еще в файле POM, который мне нужно добавить, чтобы построить связь? Я не эксперт Maven, поэтому я мог пропустить что-то, что кажется очевидным для других. Есть ли другой способ импорта модулей Python в проект Jython с использованием Maven? Любые указатели очень оценили :)

ответ

3

Нашли решение моей проблемы! Это не было связано с Maven, его можно было бы отсортировать, установив PYTHONPATH в файле jar. Я подозревал это, но думал, что это можно сделать через Maven. Я ошибался, это нужно сделать из кода Java в проекте Jython. Основной класс Java должен иметь что-то вроде этого:

 PySystemState systemState = Py.getSystemState(); 

Это был только вопрос добавления пути к библиотекам, скачанных моей Maven Jython плагин в целевых/классов/Lib в SystemState, как это:

 //Link some external python libraries installed via maven plugin 
     systemState.path.append(new PyString("target/classes/Lib")); 

Библиотеки найдены и все работает. Я счастлив.

Смежные вопросы