2015-04-03 191 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")); 

找到了图书馆和工作。我很高兴。