gpt4 book ai didi

运行时嵌套类的 java.lang.NoClassDefFoundError? (依赖问题?)

转载 作者:行者123 更新时间:2023-12-04 05:40:40 25 4
gpt4 key购买 nike

好的,情况如下:

我有三个文件:
1.TScan.java
2.Test.java
3.ScanServlet.java

我在 TScan.java 文件中编写了我的邮件类 TScan,在该类中,有一个嵌套类(不是子类),称为 TEntry。 TScan 有一个用于测试的 main() 和其他使用嵌套 TEntry 类的方法,没有问题。

此外,Test.java 是一个更高级的测试程序,它使用 TScan.java 中的项目,包括没有问题的 TScan 和 TEntry 类。 TScan.java 和 Test.java 是在 Eclipse 中开发和测试的(它也可以从命令行编译/运行)。

所以 TScan 正在发挥作用,我想将它包含在 webapp 中。安装了Jetty,写了ScanServlet.java,在Jetty中运行,没有问题。

我开始引用 TScan,它开始为 TScan 给出上述错误。更改 ClassPath 以包含 TScan.class 文件不起作用,所以我制作了一个 JAR 文件并将其粘贴在 WebApp 的 WEB-INF/lib/文件夹中,现在 ScanServlet 编译 filen,并且似乎在运行时找到了 TScan -time,但是它在运行时给出 NoClassDefFounfError TScan$TEntry。这对我来说没有意义,因为:
1.显然它现在正在寻找 TScan 类(因为它在编译或运行时没有提示)
2. TScan.java 文件出错(TEntry 不直接引用,TScan 除外),在单机模式下运行正常!
3.我把TEntry公开了,还是不行。

我发现了很多关于 NoClassDefFoundError 的问题,但没有一个涉及嵌套类,尤其是 Jetty。

请记住,我更习惯于 Delphi,如果它编译,它就会运行。 (和 ABAP 或多或少相同)。

如果有人有解决方案,我会很高兴,否则,我正在考虑:

  • 将整个 TScan 复制粘贴到 ScanServlet 中(如果它在同一个文件中,找到它应该没有问题!)(不是非常模块化)
  • 将 TEntry 移动到单独的 .java 文件中的单独类中? (干净地提取可能会很痛苦)。
  • 让 ScanServlet 作为命令行程序调用 TScan.Java。 (慢...)
  • 最佳答案

    您是如何创建 jar 文件的,它是否在正确的文件夹中包含 TScan$TEntry.class?
    内部或嵌套类仍会生成您需要发布的 .class 文件

    关于运行时嵌套类的 java.lang.NoClassDefFoundError? (依赖问题?),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11282221/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com