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

无法从JAR运行配置为使用Jython的Java项目,java,jar,jython,executable-jar,Java,Jar,Jython,Executable Jar,我有一个利用Jython库的Java项目。我可以在Eclipse中或从命令行构建代码并很好地执行它,但是,当我将项目打包到JAR文件中时,会出现以下错误: ImportError: no Module named socket 我知道这个错误的意思,套接字是Python脚本中的第一个模块。为什么这个不能从JAR文件运行?jar也打包在我构建的jar中,所以我认为它应该能够找到它。有什么想法吗?当从Eclipse(为您管理类路径)或从命令行(我猜您在运行类路径时指定了类路径)运行时,您在类路径上

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

ImportError: no Module named socket
我知道这个错误的意思,套接字是Python脚本中的第一个模块。为什么这个不能从JAR文件运行?jar也打包在我构建的jar中,所以我认为它应该能够找到它。有什么想法吗?

当从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选项(例如,main class属性),则会忽略-cp标志,因此如果您执行以下操作,则不会起作用:

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

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

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

有没有办法在清单,以便它引用主JAR中打包的JAR?我发现了这个问题,但目前还没有太多解决方案。我查看了JAR内部,结果发现Python模块没有内置到JAR中。如果我使用归档管理器将其放入JAR的根目录中,JAR每次都会按预期运行。但是您可以e right@Pace,显然Python模块不在类路径上,因为它不在JAR中。