2012-05-07 10 views
0

WindowsでJavaでJoda Timeを使用しようとしています。私はジョダ時間1.2をダウンロードし、私のCLASSPATHにJARを入れている:Java ClassNotFound例外はスクリプト言語では発生しますが、Javaコードでは発生しません。

PS D:\Java\Jars> $env:CLASSPATH 
.;C:\Program Files\Java\jre6\lib\ext\QTJava.zip;D:\Java\Jars\joda-time-2.1.jar 

次のJavaコードは完璧に動作します:

import org.joda.time.*; 

class Foo { 
    public static void main (String[] args) { 
     System.out.println("Hello, world"); 
     DateTime d = new DateTime(); 
     DateTime b = new DateTime(1981,12,25,0,0); 
     Period p = new Period(b,d); 
     System.out.println(p.toString()); 
    } 
} 

しかし、私はスクリプト言語からジョダ時間をインポートしようとすると、私はClassNotFoundエラーを取得します。

のJython:

PS D:\Java\Jars> java -jar .\jython.jar 
Jython 2.5.2 (Release_2_5_2:7206, Mar 2 2011, 23:12:06) 
[Java HotSpot(TM) Client VM (Sun Microsystems Inc.)] on java1.6.0_31 
Type "help", "copyright", "credits" or "license" for more information. 
>>> from org.joda.time import DateTime 
Traceback (most recent call last): 
    File "<stdin>", line 1, in <module> 
ImportError: No module named joda 
>>> import os 
>>> os.getenv("CLASSPATH") 
'.;C:\\Program Files\\Java\\jre6\\lib\\ext\\QTJava.zip;D:\\Java\\Jars\\joda-time-2.1.jar' 

のClojure:

PS D:\Java\Jars> java -jar .\clojure-1.4.0.jar 
Clojure 1.4.0 
user=> (import (org.joda.time DateTime Period)) 
ClassNotFoundException org.joda.time.DateTime java.net.URLClassLoader$1.run (:-1) 

どのように私はここで間違っているものを診断することができますか?おそらく、問題の原因となっているスクリプト環境に固有の何かがあります。私はPythonを知っていますが、私はJythonのJava-interopの側面に詳しくは分かりません。私は上記のテストを設定するのに十分なほどClojureについてはほとんど知りません。

示されているように、Jython内のクラスパスはうまく見えます。

答えて

1

は、あなたはそれらのJARのから直接両方のプログラムを実行している:

java -jar archive.jar 

システムクラスパスを使用しません。実行可能なJARはすべての依存関係にバンドルする必要があります。テスト目的のために、この単純な代替手段を試してみてください:Clojureのコマンドライン評価を実行します

java -cp "D:\Java\Jars\joda-time-2.1.jar;D:\Java\Jars\clojure-1.4.0.jar" clojure.main 

を、ジョダ時ライブラリに含まれています。同様のものがJythonでも利用できるはずです。

+0

ありがとうございます。問題が修正されました。私は実行可能なジャーの詳細を知らなかった。 –

関連する問題