Java应用程序NoClassDefFoundError

时间:2009-09-04 20:59:02

标签: java unix jar executable-jar noclassdeffounderror

创建了一个Java应用程序,通过CIS(Content Integration Suite)将文档上载到存储应用程序。该应用程序在RAD中成功运行,但作为unix环境中的可执行jar,获取NoClassDefFoundError。我在本地机器上找不到该课程,并且没有在互联网上引用该课程。

清单包含所需jar文件和主类的类路径。

有人可以帮忙吗?

Fri Sep 04 16:47:25 EDT 2009 : StandardBatchApplication startup() completed.
java.lang.NoClassDefFoundError: com.stellent.cis.support.spring.ResourceHelper
        at com.stellent.cis.common.classloader.IsolatedJarClassLoader$TemporaryF
        at com.stellent.cis.common.classloader.IsolatedJarClassLoader$TemporaryF
        at com.stellent.cis.common.classloader.IsolatedJarClassLoader$TemporaryF
        at com.stellent.cis.common.classloader.IsolatedJarClassLoader.<clinit>(I
        at java.lang.J9VMInternals.initializeImpl(Native Method)
        at java.lang.J9VMInternals.initialize(J9VMInternals.java:196)
        at com.stellent.cis.impl.CISApplicationFactory.getCisClassloader(CISAppl
        at com.stellent.cis.impl.CISApplicationFactory.getCisApplication(CISAppl
        at com.stellent.cis.impl.CISApplicationFactory.initialize(CISApplication
        at com.lowes.ipt.edi.processor.CISApp.initialize(CISApp.java:48)
        at com.lowes.ipt.edi.processor.EDItoEDAMUploadProcessor.main(EDItoEDAMUp
Caused by: java.lang.ClassNotFoundException: com.stellent.cis.support.spring.Res
        at java.net.URLClassLoader.findClass(URLClassLoader.java:496)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:631)
        at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:349)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:597)
        ... 11 more

更新:我只有一个与CIS有关的jar文件。我看着罐子,里面没有课。我不熟悉任何其他具有CIS类的RAD默认类。这不仅适用于此类,也适用于webservices.jar中包含的类。我可以看到类,它是我的类路径的一部分,因为当我从路径中删除Jar时,它会抱怨另一个缺少的类。当我把它放回到我的路径中时,它会在程序中得到进一步的效果并给出相同的错误。

2 个答案:

答案 0 :(得分:0)

缺少的类可能在某个JAR文件中,该文件安装在本地计算机上而不是远程计算机上。或者更可能的是 - 它安装在移除机器中的不同位置,然后安装在本地机器中(如果远程机器是Unix机器并且本地是Windows机箱,则可以预期)。

在您构建的JAR中的MANIFEST.MF文件中设置的类路径必须指定用于在远程计算机上查找所有相关JAR的类路径 - 您必须找到安装JAR的位置,然后将该路径添加到清单类路径。 Unix机器中的JAR通常安装在/ usr / share / java中,但我不能告诉你更多因为我不熟悉CIS而且我不知道它通常分发的JAR文件。

答案 1 :(得分:0)

问题是由UNIX中tmp目录的权限引起的。 CIS API使用tmp目录来创建和存储所需的文件/类以供执行。因为我在我自己的ID下运行该进程,所以它无法访问由wsadmin创建的tmp文件。要解决此问题,必须将该进程作为wsadmin运行。