好的,情况如下:
我有三个文件: 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。(减缓...)