无法从JAR运行配置为使用Jython的Java项目



我有一个使用Jython库的Java项目。我可以在Eclipse或命令行中构建代码并执行它,但是,当我将项目打包到JAR文件中时,我得到以下错误:

ImportError: no Module named socket

我知道这个错误意味着什么,socket是Python脚本中有问题的第一个模块。为什么它不能从JAR文件运行?JAR也打包在我构建的JAR中,所以我认为它应该能够找到它。什么好主意吗?

我也有类似的问题,直到我发现实际上有两个Jython jar——Jython .jar和Jython -standalone.jar。独立jar包含所有标准python Lib模块。用它似乎解决了我的进口问题。

从Eclipse(它为您管理类路径)或从命令行(我猜您在运行它时指定了类路径)运行时,您将在类路径上包含Jython.jar。

遗憾的是,在jar中包含其他jar并不足以将该jar放在类路径上。您可以提取整个Jython.jar并将提取的文件包含在您的jar中(Eclipse的后续版本在使用Runnable jar File选项导出时执行此操作)。

但是,如果Jython代码期望它在JAR中,如果存在名称空间冲突,或者法律问题(在许多情况下,提取第三方JAR并将其作为您自己的JAR重新分发是非法的),这可能会导致问题。

要确认这一点,请尝试在Eclipse外部运行您的jar,包括类路径上的jython.jar。例如:

java -cp lib/jython.jar:myjar.jar com.me.main.Main

请记住,如果你使用-jar选项(例如主类属性),那么-cp标志将被忽略,所以如果你这样做,这将不起作用:

java -cp lib/jython.jar -jar myjar.jar

如果是这个问题,那么有很多方法可以自动在类路径中包含jython.jar。两种流行的方法是在清单中使用classpath属性(只要您能保证jython.jar相对于主jar的位置即可),或者将jar的执行封装在shell脚本中。

最新更新