0

WindowsのJavaでJodaTimeを使用しようとしています。Joda Time 1.2をダウンロードし、JARをCLASSPATHに配置しました。

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());
    }
}

ただし、スクリプト言語からjoda時間をインポートしようとすると、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相互運用機能についてはあまり詳しくありません。上記のテストを設定するのに十分なほど、Clojureについてはほとんど知りません。

示されているように、Jython内のクラスパスは問題ないようです。

4

1 に答える 1

1

両方のプログラムを JAR から直接実行しています。

java -jar archive.jar

システムクラスパスを使用しないもの。実行可能な JAR は、すべての依存関係と一緒にバンドルする必要があります。テスト目的で、この単純な代替手段を試してください。

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

Joda Time ライブラリが含まれている Clojure コマンド ライン エバリュエーターを実行します。同様のものが Jython でも利用できるはずです。

于 2012-05-07T10:34:11.430 に答える