如何诊断脚本语言中发生的Java ClassNotFound异常,而不是Java代码



我正在尝试在Windows上的Java中使用Joda Time。我已经下载了 Joda Time 1.2 并将 JAR 放在我的 CLASSPATH 上:

PS D:JavaJars> $env:CLASSPATH
.;C:Program FilesJavajre6libextQTJava.zip;D:JavaJarsjoda-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 time 时,我收到 ClassNotFound 错误。

杰通:

PS D:JavaJars> 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:JavaJars> 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 中的类路径似乎很好。

您直接从它们的 JAR 中运行这两个程序:

java -jar archive.jar

不使用系统类路径。可执行 JAR 必须与其所有依赖项捆绑在一起。尝试这个简单的替代方法来进行测试:

java -cp "D:JavaJarsjoda-time-2.1.jar;D:JavaJarsclojure-1.4.0.jar" clojure.main

它将运行Clojure命令行评估器,其中包括Joda Time库。Jython也应该有类似的东西。

最新更新