5

Apache-POI と一緒に Jython を使用しようとすると、Jython スタンドアロン jar が ImportError 例外をスローします。

以下に、私の Jython スクリプトの呼び出し方法を示します。

java -cp C:\jAutoMailerScript\lib\poi-3.9-20121203.jar -jar jython.jar main.py

エラー:

トレースバック (最新の呼び出しが最後):

ファイル「main.py」の 32 行目

org.apache.poi.hssf.usermodelからのインポート *

ImportError: Apache という名前のモジュールがありません

これは 32 行目のコードです。

from org.apache.poi.hssf.usermodel import *

Java のサードパーティ アプリケーションを使用するために、Jython からの制限はありますか?

前もって感謝します、

4

4 に答える 4

7

-cp-jarを同時に使用することはできません。この-jarオプションは、他のクラスパス設定をオーバーライドします。http://docs.oracle.com/javase/7/docs/technotes/tools/windows/java.htmlを参照してください。

python.pathシステム プロパティを使用すると動作するはずです。

java -Dpython.path=C:\jAutoMailerScript\lib\poi-3.9-20121203.jar -jar jython.jar main.py

別のコマンドを次に示します。

java -cp C:\jAutoMailerScript\lib\poi-3.9-20121203.jar;jython.jar org.python.util.jython main.py

ただし、これらのコマンドはいずれもスタンドアロンの Jythonでは機能しないことが判明しました。質問にあるように、が得られますImportError。関連すると思われる古いオープン バグがあります: http://bugs.jython.org/issue1422 (Solaris に問題があると書かれていますが、私が知る限り他のプラットフォームにも当てはまります)。

インストールされた Jythonを使用すると、jythonコマンドは正常に動作します。

jython -Dpython.path=C:\jAutoMailerScript\lib\poi-3.9-20121203.jar main.py

スタンドアロンの jython.jar には、標準ライブラリの Python モジュール (Libフォルダー内) が含まれていることに注意してください。これらのモジュールは、Jython をインストールすると得られる jython.jar には含まれていません。

問題が完全に解決されない場合でも、この回答が役立つことを願っています。

于 2013-03-02T07:34:15.657 に答える
3

私はあなたの問題を再現しようとしてきましたが、スタンドアロン Jython の 2.5.3 バージョンでも同じことが発生しました。POI 3.7でも試しました。それでも同じ取引。Arshadが作成したsys.path.appendの提案も試しました。ここで奇妙なことが起こっています(別のライブラリでテスト - 今回はbarcode4j):

c:\development\local\lib\jython-sa-2.5.3>java -jar jython-standalone-2.5.3.jar
Jython 2.5.3 (2.5:c56500f08d34+, Aug 13 2012, 14:54:35)
[Java HotSpot(TM) 64-Bit Server VM (Oracle Corporation)] on java1.7.0_10
Type "help", "copyright", "credits" or "license" for more information.
>>> import sys
>>> sys.path
['', 'C:\\development\\local\\lib\\jython-sa-2.5.3\\Lib', 'C:\\development\\local\\lib\\jython-sa-2.5.3\\jython-standalone-2.5.3.jar\\Lib', '__classpath__', '__pyclasspath__/']
>>> sys.path.append('C:\development\local\lib\barcode4j-2.0\build\barcode4j.jar')
>>> sys.path
['', 'C:\\development\\local\\lib\\jython-sa-2.5.3\\Lib', 'C:\\development\\local\\lib\\jython-sa-2.5.3\\jython-standalone-2.5.3.jar\\Lib', '__classpath__', '__pyclasspath__/', 'C:\\development\\local\\lib\x08arcode4j-2.0\x08uild\x08arcode4j.jar']
>>>

'\' 区切り記号のためにパスがどのようにスクランブルされているかがわかりますか?

( python.path の提案も試しましたが、報告したのと同じエラーが発生します。)

この報告された問題または類似/関連する問題に遭遇している可能性はありますか? シナリオ (スタンドアロン バージョン) とあなたと私が使用したバージョンに一致するようです。

于 2013-03-05T15:12:27.637 に答える
1

あなたはこのようにあなたのシステムパスにjarを追加することを試みることができます

sys.path.append('C:\jAutoMailerScript\lib\poi-3.9-20121203.jar')

次に、同じスクリプトを実行してみます。パスに到達するにはosモジュールを使用する方が良いでしょうが。WindowsOSのjythonでスラッシュがどのように扱われるかわかりません。

于 2013-02-22T16:45:23.567 に答える