加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

java – 运行时未找到jar中的类,但用于编译

发布时间:2020-12-15 04:11:57 所属栏目:Java 来源:网络整理
导读:从ant文件构建这个项目后,我收到一个包含我构建的所有类的jar.当我尝试运行此jar时,出现以下错误: Exception in thread "main" java.lang.NoClassDefFoundError: javax/media/j3d/SceneGraphObject 这个错误表明其中一个罐子,特别是来自java3d的j3dcore.jar
从ant文件构建这个项目后,我收到一个包含我构建的所有类的jar.当我尝试运行此jar时,出现以下错误:

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

这个错误表明其中一个罐子,特别是来自java3d的j3dcore.jar,我用的是无法找到的.但是,通过将ant构建编译到类文件中时,此jar位于类路径中.

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

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

我收到错误错误:无法找到或加载主类j3d.j3dutils.jar

解决方法

Do I have to manually change my classpath in my shell when running the jar as well as change it in the ant build?

是的,一点没错.在编译时使类可用不会将类嵌入到输出或类似的东西中.它只是让它可供编译器使用(找出存在的方法等).

If I add the jars to my classpath using java -cp j3d/*.jar -jar idv.jar

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

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

鉴于this documentation,我不清楚-cp是否适用于-jar:

When you use this option,the JAR file is the source of all user classes,and other user class path settings are ignored.

一个选项是set the classpath within the manifest of the jar file itself.例如:

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

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

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

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

As a special convenience,a class path element containing a basename of * is considered equivalent to specifying a list of all the files in the directory with the extension .jar or .JAR (a java program cannot tell the difference between the two invocations).

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读