maven - 吊带模型 OSGI 配置

标签 maven osgi aem sling

我想在我们基于吊索的项目中设置吊索模型(实际上它是一个 AEM 项目)。我按照 http://sling.apache.org/documentation/bundles/models.html 上的说明进行操作但不幸的是,资源上的 adapTo 方法返回 null,所以我认为我在 OSGI 配置设置中犯了一些错误。不幸的是我没有收到任何日志文件错误,所以现在我需要一些帮助:) 我们使用 maven-bundle-plugin,我按以下方式配置:

<plugin>
    <groupId>org.apache.felix</groupId>
    <artifactId>maven-bundle-plugin</artifactId>
    <extensions>true</extensions>
    <configuration>
            <instructions>
                    <!-- we have to export for the classes to be visible -->
                    <Export-Package>
                            com.company.project.*;version=${project.version}
                    </Export-Package>
                    <Import-Package>
                            org.apache.felix.scr;version="[1.6,2)",
                            org.apache.sling.api;version="[2.1,3)",
                            org.apache.sling.api.request;version="[2.1,3)",
                            org.apache.sling.commons.scheduler;version="[2.1,3)",
                            *                                                        
                    </Import-Package>
                    <Private-Package>
                            org.apache.sling.models.*
                    </Private-Package>
                    <Include-Resource>
                            {maven-resources}
                    </Include-Resource>
                    <Sling-Model-Packages>
                            com.company.project.models.componentgroup
                    </Sling-Model-Packages>
            </instructions>
    </configuration>
</plugin>

模型作为接口(interface)实现:

package com.company.project.models.componentgroup;

import org.apache.sling.api.resource.Resource;
import org.apache.sling.models.annotations.Default;
import org.apache.sling.models.annotations.Model;

import javax.inject.Inject;


@Model(adaptables = Resource.class)
public interface MyModel {

    @Inject
    @Default(values = "My Property Value")
    String getMyProperty();

}

我有一个 Controller 类,其中 SlingResource 适应模型,但返回 null:

MyModel model = resource.adaptTo(MyModel.class);

我真的很感谢您的帮助。

最佳答案

我设法通过使用 OSGI Felix 控制台中的安装功能手动安装包 org.apache.sling.models.api 和 org.apache.sling.models.impl 并删除它来使其工作

<Private-Package>
    org.apache.sling.models.*
</Private-Package>

它可以与接口(interface)和类一起使用,就像预期的那样:)

所以我的错误出在 maven-bundle-plugin 配置中,因为这些包在 Private-Package 中不可见。

您建议在 maven-bundle-plugin 配置中的何处添加 sling.models?

关于maven - 吊带模型 OSGI 配置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25140361/

相关文章:

java - Maven exec 有效,但 java -jar 无效

maven - 计划在 maven-bundle-plugin 中支持 "Require-Bundle"

java - 如何将 Jar 中的资源目录以及所有包含的文件和子文件夹复制到另一个目录

aem - 在 CQ5/AEM 中使用个人资料图片创建用户时出现问题

OSGI @Component 注解在扩展现有 OSGI 服务时不包括基类所需的引用

java - 将github android源码导入到eclipse

java - 无法使用 Spring+Maven 退出代码 1 执行 java

java - 如何在不覆盖 MANIFEST.MF 内容的情况下使用 Ant 签署 OSGi 包?

java - 在 sling servlet 中传递一组对象

java - maven 和 jboss 模块