Java 与另一个运行正常的类位于同一包中的类的NoClassDefFoundError

Java 与另一个运行正常的类位于同一包中的类的NoClassDefFoundError,java,maven,aem,osgi-bundle,Java,Maven,Aem,Osgi Bundle,我正在为AEM 6开发,我看到我的一个类出现了NoClassDefFoundError。以下是我的maven项目的设置: +- pom.xml | +- parent | | | '- pom.xml | +- content | | | '- pom.xml | '- bundles | +- pom.xml | +- taglib | | | '- pom.xml | '-

我正在为AEM 6开发,我看到我的一个类出现了NoClassDefFoundError。以下是我的maven项目的设置:

+- pom.xml
|
+- parent
|    |
|    '- pom.xml
|
+- content
|    |
|    '- pom.xml
|
'- bundles
     |
     +- pom.xml
     |
     +- taglib
     |    |
     |    '- pom.xml
     | 
     '- components
          |
          '- pom.xml
以下是关于正在发生的事情的更多细节:

  • bundles pom将所有子bundle指定为模块
  • 聚甲醛的含量
    • 将打包指定为内容包并包含jcr_根
    • 将标记库捆绑包和组件捆绑包指定为依赖项和嵌入项
  • taglib pom.xml已将组件包指定为依赖项
  • 组件包生成了两个类:Component.class和ComponentFactory.class
  • 我安装的所有捆绑包在
    /system/console/bundles
  • taglib bundle列出它导入包含类的包
  • components捆绑包列出它导出包含类的包
如果我将add行
Component Component=new Component()
添加到我在jsp中使用的标记中,代码运行良好。使用包含代码的标记加载my page可以正常加载

但是,如果我尝试实例化一个ComponentFactory,比如
ComponentFactory=new ComponentFactory()
,那么代码将完全正常构建,然后在运行时失败。加载带有标记的“我的页面”会导致一个白色页面,错误日志中有一个
NoClassDefFoundError

我研究了这个错误,似乎是一个类在编译时可用,但在运行时不在类路径中的问题,这是有意义的。我感到困惑的是,这两个类都在target/classes中,.classpath文件似乎没有指明为什么要排除一个类


如果您有任何见解,我们将不胜感激。

NoClassDefFoundError大约有20种不同的原因。例如,在.java文件中拼写错误的类名就可以做到这一点。或者根据包声明将文件放在错误的目录中,反之亦然。基本上,这意味着在.class文件中找到的类不是由文件名和路径指示的类。谢谢。我已经验证了src和target下的路径都是正确的。我已经注意到,现在有其他异常抱怨旧的代码片段,因此包的更新可能存在一些问题。这个问题在重新启动服务器后得到了修复。如果我能从日志中找出发生了什么事情,我会发布一个答案。我的评论的进一步含义是,正在查看.class文件,期望它包含由其名称和路径指示的类,而它不在那里。