【问题标题】:Java Application NoClassDefFoundErrorJava 应用程序 NoClassDefFoundError
【发布时间】:2009-09-04 20:59:02
【问题描述】:

创建了一个 Java 应用程序以通过 CIS(内容集成套件)将文档上传到存储应用程序。该应用程序在 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 时,它会抱怨另一个缺少的类。当我把它放回我的路径时,它会在程序中走得更远并给出同样的错误。

【问题讨论】:

    标签: java unix jar executable-jar noclassdeffounderror


    【解决方案1】:

    缺少的类可能位于本地机器上安装的某个 JAR 文件中,而不是远程机器上。或者更有可能 - 它安装在与本地机器不同的位置的删除机器中(如果远程机器是 Unix 机器而你的本地机器是 Windows 机器,这是预期的)。

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

    【讨论】:

      【解决方案2】:

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

      【讨论】:

        猜你喜欢
        • 2011-05-24
        • 2018-06-18
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2023-03-08
        • 2018-02-21
        • 2011-09-17
        相关资源
        最近更新 更多