java - AEM/Sling - 如何在独立代码中创建 ResourceResolverFactory?

标签 java osgi aem jcr sling

我正在尝试编写一些独立代码而不是 OSGi bundle 来学习和尝试 AEM 中的内容。在 OSGi 包中,我可以使用 @Reference 注释获取 ResourceResolverFactory

我想知道如何在我的独立代码中得到它。我需要这个工厂来获取ResourceResolver。我不确定这在独立代码中是否有可能。

实际上,另一个工厂 PageManagerFactory 也有同样的问题!

谢谢 - 阿图尔

最佳答案

在 OSGi 环境之外引用 OSGi 服务

这根本不可能。您需要 OSGi 运行时才能使用 OSGi 服务。

在独立的 Java 应用程序中,从技术上讲,您可以在 Java 程序的 main 方法中启动框架。查看Apache Felix docs看看如何。但说实话,如果您与 AEM 合作,我不认为这样做有什么意义。这只会让事情变得更加复杂。无论如何,您都需要 bundle ,并且您首先要重新发明 AEM 已经为您所做的事情。

现在,如果您想要快速试验一些代码,而无需创建 OSGi 包,那么这里有一些我知道的简单方法:

在 AEM 中试验代码

在 AEM 中快速编写代码并测试代码的几种方法,而无需创建完整的项目。

AEM Groovy 控制台

这是一个开源工具,允许您在 AEM 实例上执行 Groovy 代码。它使您可以访问 Sling 和 JCR API,还允许您与 OSGi 服务交互。

它很容易使用,只需安装它,打开控制台页面,输入脚本并执行它。

它为许多常用对象提供开箱即用的绑定(bind),例如resourceResolversessionpageManagerqueryBuilderslingRequest 等。

它还提供了许多方便的方法,使 Sling 和 JCR API 更易于使用,以及一个非常简单的实用程序,允许您获取对 OSGi 服务的引用。

您询问了 ResourceResolverFactory,以下是如何在脚本中获取它的方法:

def resourceResolverFactory = getService("org.apache.sling.api.resource.ResourceResolverFactory")

控制台甚至可以为您生成此代码,它有一个很好的自动完成功能:

AEM Groovy Console autocomplete of OSGi services

查看the project on GitHub了解更多信息。

请注意,控制台本身使用了一堆 OSGi 包,因此代码实际上并不是独立的,因为它并不独立于 OSGi 环境而存在。但是,用户不需要创建 bundle 并部署它们只是为了试验代码。

AEM HTL REPL

您可能想查看的另一个项目是 AEM HTL REPL 。我没有使用过它,但我知道它允许您通过编写服务器端 JavaScript 来使用 WCM Use API。

使用 CRXDE

这本质上就是@VAr's answer建议。创建一个新组件或修改现有组件。

使用 JSP scriptlet 或利用 WCM Use API 的 JavaScript。您可以在 CRXDE 中执行此操作或使用实际的 IDE 来编写代码和 Vault tool将其上传到 AEM。 IntelliJ 有很好的插件和 Eclipse这让它变得更容易一些。

关于java - AEM/Sling - 如何在独立代码中创建 ResourceResolverFactory?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41708758/

相关文章:

aem - CQ5 : Inheriting/Extended Dialogs

lucene - JCR-SQL - 包含函数不会转义特殊字符?

java - 当属性为 null 时 Javers 抛出异常

java - 如何在运行时在 Spring Boot 上运行 CUSTOM DDL DML ...,而不强制 Hibernate

java - hawtio-web 卡住 "deploying",无法在 karaf 中启动

dialog - 如何在 aem 6 触摸对话框中创建单选按钮

java - 如何确定文本编码

java - Netbeans:如何知道我当前正在查看什么 JAR

java - 如何从 OSGi 组件中的第三方 jar 文件导入类

OSGi:蓝图与 Spring DM