如何在Jython项目中使用Maven导入Python模块?

时间:2015-04-03 19:57:50

标签: python maven maven-plugin jython

我正在编写一个Jython项目来创建一个文本编辑器。数据模型完全用Python编写,并使用像nose,jinja和ply这样的外部库。文本编辑器的GUI使用Java Swing库。我正在尝试使用Maven构建此项目,并发现了this useful plugin,我已将其包含在我的pom文件中,如下所示:

            <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模块?任何指针都非常感激:)

1 个答案:

答案 0 :(得分:3)

找到解决我问题的方法!它根本不是Maven相关的,它可以通过修复jar文件中的PYTHONPATH来解决。我怀疑,但认为可以通过Maven完成。我错了,需要从Jython项目中的Java代码完成。主要的Java类应该是这样的:

        PySystemState systemState = Py.getSystemState();

只需要在systemState中的target / classes / Lib中添加由我的Maven jython插件下载的库的路径,如下所示:

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

找到了图书馆并且事情有效。我很高兴。