【问题标题】:Weblogic application complains about some classes missing, how to debug?Weblogic 应用程序抱怨缺少一些类,如何调试?
【发布时间】:2010-12-25 21:03:06
【问题描述】:

我有一个相当复杂的 J2EE 应用程序,我没有任何文档,我正在尝试让它运行。

我已经获得了 ant 构建脚本来编译包含 WAR 文件的 EAR 文件,但是即使我在 weblogic 控制台上“成功部署”了这个应用程序,它仍然无法正常工作。

EAR 文件中缺少许多必需的 jar,因此我在部署应用程序时在控制台日志中收到有关缺少类的错误。有时即使在我检查了某个特定的类之后,我仍然会收到错误。

调试和运行此应用程序的最佳方法是什么?

在 J2EE/Java 中是否有“查找所有依赖项”的快捷方式,任何人都知道的应用程序可以分析代码并查找依赖项或类似的东西?

【问题讨论】:

    标签: java jakarta-ee weblogic classpath


    【解决方案1】:

    我知道没有简单的方法来处理这个问题。如果应用程序提供了一个构建 EAR 的 ant 任务,那么结果应该是一个自包含的可部署应用程序 EAR。 EAR 可能需要将额外的库添加到某个类路径中,没有文档真的很难知道是什么。

    我想这句话是问题的核心:“有时即使在我检查了某个特定的类之后,我仍然会收到错误。”你到底是什么意思?

    您收到未找到类的错误,但您可以在 EAR 文件中看到该类?如果是这种情况,那么事情真的很困难,很可能是某种类加载器问题。我根本不了解 WebLogic,但是在 WebSphere 中部署应用程序时,您可以选择是优先考虑 EAR 中的 JAR 还是 WebSphere 本身中的相同 JAR。某些应用程序需要一种或另一种设置。如果 WebLogic 中有类似的东西,那么这可能是你的问题。

    另一个可能的问题是应用程序可能依赖于 WebLogic 提供的基础架构库(例如 XML 解析器),但需要与您正在使用的 WebLogic 版本一起提供的不同版本。

    如果没有说明您正在使用的 WebLogic 版本支持该应用程序的文档,我担心您正在打一场漫长、艰苦(甚至是失败)的战斗。

    【讨论】:

    • +1,谢谢,确实有点可能是版本不兼容。现在在我看来,当这个应用程序最后一次部署时,EAR 可能首先被解压缩,然后在其中添加了一些 jar,以实现运行时依赖并使应用程序运行。感谢您的想法,我可以忍受漫长的战斗,损失不多......
    【解决方案2】:

    在 J2EE/Java 中是否有任何快捷方式 “查找所有依赖项”,应用任何人 知道分析代码并找到 依赖或类似的东西?

    如果您能找到原始开发人员,我会再次尝试从原始开发人员那里获取文档……或帮助……。 [IMO,在没有任何文档的情况下开发/提供软件的人应该不断被人们提出愚蠢问题的窃听。]但我想你已经尝试过了。

    然后是另一个答案中提到的 jarfinder.com 和其他服务。 (对我来说很陌生!)

    如果失败,我会尝试在 FQN 上进行 Google 搜索。如果缺少的类是常用库的一部分,那么您可能会点击 Javadocs ......或者其他人的帖子与您的问题相似。

    如果“Google it”方法失败,请使用包命名中缺少的类的线索来尝试找到它们的来源。如果他们遵循 Sun 的建议,则名称应映射到您可以通过网络搜索找到的公司或(真实或伪)组织。

    【讨论】:

      【解决方案3】:

      在 J2EE/Java 中是否有“查找所有依赖项”的快捷方式,任何人都知道的应用程序可以分析代码并查找依赖项或类似的东西?

      你是说编译器吗?我在这里实际上是半认真的(即使编译器不会给你一个丢失的 JAR 的名称)。事实上,如果您使用 Ant 成功编译了该应用程序,那么您可能在 编译时 拥有所需的所有依赖项(您可能在运行时需要更多依赖项,但是,您需要执行代码来识别它们)。也许您只需要在打包期间在 EAR 中添加更多它们。或者您可能需要在应用服务器类路径级别添加更多依赖项。

      在这两种情况下,jarFinder.comDocjar.comJarhoo.com 等搜索引擎可能会帮助您识别丢失的 JAR 并解决您的 ClassNotFoundExceptionNoClassDefFoundError

      您实际上应该向读者提供有关缺失课程的更多详细信息,我相信人们将能够给您一些提示并为您指明正确的方向。

      【讨论】:

      • 感谢搜索工具。从名称中我现在可以看出一些依赖项是内部 jar,它们没有被构建,也没有作为 build.xml 的一部分包含在 EAR 中。
      【解决方案4】:

      如果您能够成功构建和部署应用程序,但仍然收到有关缺少类的错误,则可能是某些 jar 类是通过反射调用的。您可能希望通过 IDE 在项目中搜索反射 API 调用。 这些调用可能类似于, "Class cls = Class.forName(..); cls.newInstance()."

      有时即使在我检查了 特定的课程在那里我仍然得到 错误。

      这可能是部署问题。检查类路径。类路径中可能缺少某些 jar。

      【讨论】:

        【解决方案5】:

        我假设您设法将这个应用程序放在一起并在一个 IDE(可能是 Eclipse)中编译。为什么不简单地将构建时可用的所有 Jar 放入 EAR 中?

        如果您必须通过反复试验来调试它,您可以查看缺失类的列表并通过谷歌搜索类名来确定它们属于哪些 jar,或者您也可以在 IDE 中找到它们.

        如果您在识别某些类时遇到很多麻烦,请在此处发布类名(或错误消息),然后有人应该能够告诉您在哪里可以找到它所属的 Jar。

        【讨论】:

        • 实际上我只设法使用ant从命令行编译,默认目标构建WAR并将其放置在EAR中。因此,感谢您提出将 Eclipse 放入内部的建议,听起来这将有助于识别一些问题,我接下来会这样做。但是我是否正确理解你的意思,如果我可以构建一些东西,我也应该能够用相同的 jar 运行它?我没想到会是这种情况,我认为很可能缺少一些纯粹的运行时依赖项?
        • 可能会有动态配置的依赖关系,直到运行时才得到解决,唉,所以这并不难。但我会说这是不太可能的情况。此外,使用编辑器和 ant 并没有错,如果这对你有用的话。
        • 我确实认为我现在看到了一些运行时依赖问题。我最近一直在使用 Perl 和 Ruby,这些语言似乎更适合命令行。我可能应该恢复使用 IDE,因为这些 J2EE 应用程序似乎总是由更多和更长的文件组成,而且我习惯于使用更简洁的动态语言。
        猜你喜欢
        • 1970-01-01
        • 2015-10-31
        • 2018-06-25
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-11-30
        • 2015-03-13
        • 1970-01-01
        相关资源
        最近更新 更多