2015-04-03 71 views
2

我在寫一個Jython項目來創建一個文本編輯器。數據模型完全用Python編寫,並使用外部庫,如鼻子,忍者和層。文本編輯器的GUI使用Java Swing庫。我試圖建立這個項目使用Maven,並發現了this useful plugin,我已經包含在我的POM文件像這樣:如何在Jython項目中使用Maven導入Python模塊?

  <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模塊都保存在由target/classes/Lib中Maven插件創建的文件夾中。到目前爲止好,但是當我嘗試運行jar,我不能讓我的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專家,所以我可能錯過了其他人顯而易見的事情。有沒有其他方式使用Maven在Jython項目中導入Python模塊?任何指針非常感謝:)

回答

3

找到解決我的問題!它根本不是Maven相關的,它可以通過修復jar文件中的PYTHONPATH來解決。我懷疑是這樣,但認爲可以通過Maven完成。我錯了,它需要從Jython項目中的Java代碼完成。主要的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")); 

找到了圖書館和工作。我很高興。

相關問題