我有一个使用Jython库的Java项目。我可以在Eclipse中或从命令行构建代码并执行它,但是,当我将项目打包到JAR文件中时,我收到以下错误:
ImportError: no Module named socket
我知道这个错误意味着什么,而socket是Python脚本中的第一个模块。为什么不从JAR文件运行? Jython.jar也打包在我构建的JAR中,所以我认为它应该能够找到它。有什么想法吗?
答案 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模块。使用它似乎解决了我与导入相关的困境。