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

标签 java clojure jodatime jython

我正在尝试在 Windows 上使用 Java 中的 Joda Time。我已经下载了 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 中的类路径看起来不错,如图所示。

最佳答案

您直接从 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

它将运行 Clojure 命令行评估器,其中包含 Joda Time 库。 Jython 也应该提供类似的功能。

关于java - 如何诊断脚本语言中发生的 Java ClassNotFound 异常,而不是 Java 代码中发生的异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10480179/

相关文章:

java - JAVA中如何从URL中获取不省略空格的字符串

Java 将 List 和 Map 中的值相乘

java - 在 Joda-Time 间隔中查找漏洞

java - joda - 解析 RSS 项中 pubDate 的时区

java - jodatime DateTime 对象和 Locale

java - 从3.1.2升级到3.2.1.Release,无法解析@repository和getJdbcTemplate

java - Selenium 找不到元素

clojure - 在 clojure.core.logic 中编码 "two out of three"

forms - Clojure(打嗝): How can I know which submit button got pressed in a form?

clojure - 从循环内附加到 clojure 向量