【问题标题】:Sling Models OSGI Configuration吊索模型 OSGI 配置
【发布时间】:2014-09-28 04:57:29
【问题描述】:

我想在我们基于 sling 的项目中设置 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>

模型被实现为接口:

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);

我非常感谢您的帮助。

【问题讨论】:

    标签: maven osgi aem sling


    【解决方案1】:

    我设法通过在 OSGI Felix 控制台中使用安装功能手动安装捆绑包 org.apache.sling.models.api 和 org.apache.sling.models.impl 并删除

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

    它适用于接口和类,就像预期的那样:)

    所以我的错误出现在 maven-bundle-plugin 配置中,因为使用 Private-Package 看不到包。

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

    【讨论】:

    • 这为我解决了!您也可以将这两个文件放到内容模块的安装文件夹中,这样您就不必使用 Web 控制台添加它。
    • 我正在做同样的事情并发现同样的错误现在它已经为我解决了,但我不知道你在做什么不正确......我已经为它创建了一个 git repo。采取参考github.com/gargshivani111/slingmodels.git希望对你有帮助。
    • 要回答您的问题,您没有在 maven-bundle-plugin 中包含 sling.models 包。默认情况下,provided 已作为 AEM 中的捆绑包提供。有关捆绑插件的更多信息,特别是private-package,请参阅:felix.apache.org/documentation/subprojects/… 另外,您的回答是正确的,请接受。
    猜你喜欢
    • 2019-03-07
    • 2019-02-08
    • 2014-10-09
    • 1970-01-01
    • 2023-02-20
    • 1970-01-01
    • 2017-02-20
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多