Servlets 移动到AEM 6.3后,AEM servlet配置工厂丢失

Servlets 移动到AEM 6.3后,AEM servlet配置工厂丢失,servlets,aem,sling,Servlets,Aem,Sling,我在AEM 6.0中使用了ACS commons,但在6.3中,/system/console/configMgr中缺少工厂。我将代码与当前的ACS站点地图进行了比较,注释是相同的 @Component(metatype = true, label = "Apple SEO Site Map Servlet", description = "SEO Site Map Servlet", configurationFactory = tr

我在AEM 6.0中使用了ACS commons,但在6.3中,/system/console/configMgr中缺少工厂。我将代码与当前的ACS站点地图进行了比较,注释是相同的

@Component(metatype = true,  
        label = "Apple SEO Site Map Servlet",  
        description = "SEO Site Map Servlet",  
        configurationFactory = true,  
        policy = ConfigurationPolicy.REQUIRE)  
@Service  
@SuppressWarnings("serial")  
@Properties({@Property(name = "sling.servlet.resourceTypes", unbounded = PropertyUnbounded.ARRAY,  
        label = "Sling Resource Type", description = "Sling Resource Type for the Home Page component or components."),  
        @Property(name = "sling.servlet.selectors", value = "search-engine-sitemap", propertyPrivate = true),  
        @Property(name = "sling.servlet.extensions", value = "xml", propertyPrivate = true),  
        @Property(name = "sling.servlet.methods", value = "GET", propertyPrivate = true),  
        @Property(name = "webconsole.configurationFactory.nameHint",  
                value = "Site Map on resource types: [{sling.servlet.resourceTypes}]")})

根据上面评论中的讨论,问题在于设置maven插件以生成scr描述符,而不是注释本身的使用

关于这些注释如何工作的一些附加信息:

  • 在创建包以生成xml文件时,实际上会处理注释。OSGI容器中使用的是生成的XML输出。如果您有理由相信所使用的注释是正确的,那么请验证生成的xml

  • 在AEM 6.3之前,一般做法是将felix scr注释与maven scr插件结合使用。由于6.3可以使用官方OSGI包中的注释,因此R6中添加了注释,因此felix注释被弃用。您不再需要maven scr插件,maven bundle插件将处理OSGI R6注释


  • 由于容器使用的是xml,因此没有理由从中声明服务。您可以添加在target/classes/OSGI-INF下为6.0和6.3代码生成的scr描述文件。在目标类下似乎没有OSGI-INF文件。在上面添加了一个屏幕截图。您正在使用哪些注释?6.3中的felix scr注释或osgi注释,以及6.3中的pom是否包含“maven scr plugin”,但我缺少解决此问题的构建阶段生成scr描述符。请随意将此作为答案发布,因为您的评论帮助我找到了解决方案。