2011-07-07 74 views
2

我有一個利用Jython庫的Java項目。我可以生成代碼並執行微調無論是在Eclipse或通過命令行,然而,當我包的項目到一個JAR文件,我得到以下錯誤:無法運行配置爲從JAR使用Jython的Java項目

ImportError: no Module named socket 

我知道這個錯誤是什麼意思,而套接字是相關Python腳本中的第一個模塊。爲什麼不從JAR文件運行? Jython.jar也打包在我構建的JAR中,所以我認爲它應該能夠找到它。有任何想法嗎?

回答

1

從Eclipse(爲您管理類路徑)或從命令行運行(我猜測您在運行時指定了類路徑)時,您在類路徑中包含Jython.jar。令人遺憾的是,包括jar中的其他jar並不足以將該jar放在classpath中。您可以提取整個Jython.jar,包括您在罐子裏提取的文件(以後當你與運行的JAR文件的導出版本的Eclipse這樣做選項。

然而,這可能會導致問題,如果Jython的代碼期望它在JAR中,如果有命名空間衝突或法律問題(在很多情況下,提取第三方jar並將其重新分發爲非法是非法的)

要確認這一點,請嘗試運行您的jar在Eclipse之外,包括類路徑上的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腳本中。

+0

有沒有辦法在清單中編輯classpath,以便引用打包在主JAR中的JAR? –

+0

我發現了這個問題,但目前還沒有太多的解決方案。我查看了JAR內部,結果發現Python模塊沒有內置到JAR中。如果我使用歸檔管理器將其歸入JAR的根目錄,那麼每次JAR都會按預期運行。但是你是對的@Pace,顯然Python模塊不在類路徑中,因爲它不在JAR中。 –

1

我有類似的問題,直到我發現實際上有兩個Jython jar - jython.jar和jython-standalone.jar。獨立的jar包含所有標準的python Lib模塊。使用這似乎解決了我的進口相關的困境。