在运行时找不到jar中的类,但已用于编译



在我从ant文件构建这个项目后,我收到了一个包含我构建的所有类的jar。当我尝试运行这个jar时,我得到以下错误:

Exception in thread "main" java.lang.NoClassDefFoundError: javax/media/j3d/SceneGraphObject

这个错误表明找不到其中一个jar,特别是我正在使用的java3d中的j3dcore.jar。但是,当通过ant构建编译到类文件中时,这个jar位于类路径上。

为什么这个类在运行时找不到,但在编译时却找到了?在运行jar时,我是否必须手动更改shell中的类路径,以及在ant构建中更改它?

如果我使用java -cp j3d/*.jar -jar idv.jar 将jar添加到类路径中

我得到错误Error: Could not find or load main class j3d.j3dutils.jar

在运行jar时,我是否必须手动更改shell中的类路径,以及在ant构建中更改它?

是的,当然。使类在编译时可用并不会将该类嵌入到输出或类似的内容中。它只是让编译器可以使用它(找出存在的方法等)。

如果我使用java-cpj3d/*.jar-jar-idv.jar-将jar添加到类路径中

是的,它会——因为它正在扩展为:

java -cp j3d/foo.jar j3d/bar.jar ... -jar idv.jar

鉴于以下文档:,我不清楚-cp是否与-jar一起工作

使用此选项时,JAR文件是所有用户类的源,其他用户类路径设置将被忽略。

一种选择是在jar文件本身的清单中设置类路径。例如:

Class-Path: j3d/foo.jar j3d/bar.jar

另一种方法是暂时忽略-jar命令行选项,并使用:

java -cp j3d/*:idv.jar your.class.name.Here

注意*而不是*.jar,如文件所示:

作为一种特殊的便利,一个包含基名*的类路径元素被认为相当于指定一个扩展名为.jar或.jar的目录中所有文件的列表(java程序无法区分这两种调用)。

相关内容

  • 没有找到相关文章

最新更新