2011-07-07 6 views
2

私はJythonライブラリを利用するJavaプロジェクトを持っています。 、私はこのエラーが何を意味するか知っているJythonからJythonを使用するように設定されたJavaプロジェクトを実行できません

ImportError: no Module named socket 

:私は、コードをビルドし、Eclipseで、またはコマンドラインからいずれかの罰金、それを実行し、私はJARファイルにプロジェクトをパッケージ化するときしかし、私は次のエラーを取得することができますsocketは問題のPythonスクリプトの最初のモジュールです。なぜこれはJARファイルから実行されませんか? Jython.jarも私が作成したJARの内部にパッケージ化されているので、それを見つけることができるはずです。何か案は?

答えて

1

Eclipse(あなたのためのクラスパスを管理しています)またはコマンドライン(クラスパスを実行するときにクラスパスを指定していると思います)からJython.jarがクラスパスに含まれています。

悲しいことに、あなたの瓶の中に他の瓶を含めても、その瓶をクラスパスに置くには不十分です。あなた全体Jython.jarを抽出して、あなたがRunnableをJARファイルにエクスポートする場合は、後のEclipseのバージョンでは、この操作を行う(あなたの瓶に抽出されたファイルを含めることができオプション。

しかし、これは問題につながる可能性がありJythonの場合コードが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を含むように、いくつかの方法があります。 2つの一般的なアプローチは、マニフェストのclasspath属性を使用することです(jython.jarの場所をメインのjarに関連させて保証する限り)。あるいは、シェルスクリプトでjarの実行をラップすることもできます。

+0

メインJARにパッケージされているJARを参照できるように、マニフェストのクラスパスを編集する方法はありますか? –

+0

私はこの問題を発見しましたが、現時点では解決策はほとんどありません。私はJARを見て、PythonモジュールがJARに組み込まれていないことが分かりました。アーカイブマネージャを使用してJARのルートにドロップすると、毎回JARが意図したとおりに実行されます。しかし、あなたは正しい@Paceでした。明らかに、PythonモジュールはJARにないので、クラスパスにはありませんでした。 –

1

実際には2つのJython jar(jython.jarとjython-standalone.jar)が存在することがわかるまで、私は同様の問題を抱えていました。スタンドアロンのjarファイルには、すべての標準Python Libモジュールが含まれています。それを使って、私の輸入関連の不具合を修正するように見えました。

関連する問題