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

时间:2011-07-07 15:37:33

标签: java jar jython executable-jar

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

ImportError: no Module named socket

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

2 个答案:

答案 0 :(得分:1)

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

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

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

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

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

请记住,如果使用-jar选项(例如main class属性),则会忽略-cp标志,因此如果您执行此操作,则无效:

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

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

答案 1 :(得分:1)

我遇到了类似的问题,直到我发现实际上有两个Jython jar - jython.jar和jython-standalone.jar。独立jar包括所有标准的python Lib模块。使用它似乎解决了我与导入相关的困境。