在 OSGi 环境之外引用 OSGi 服务
这根本不可能。您需要 OSGi 运行时才能使用 OSGi 服务,期间。
在独立的 Java 应用程序中,从技术上讲,您可以在 Java 程序的 main 方法中启动框架。查看Apache Felix docs 了解如何操作。但老实说,如果您正在使用 AEM,我不认为这样做有什么意义。这只会让你的事情变得更复杂。无论如何,您都需要捆绑包,并且您将重新发明 AEM 已经为您做的事情。
现在,如果您想做的是快速试验一些代码,而无需创建 OSGi 包的开销,我知道以下几种简单的方法:
在 AEM 中试验代码
在 AEM 中快速编写代码并对其进行测试的几种方法,无需创建完整的项目。
AEM Groovy 控制台
这是一个开源工具,可让您在 AEM 实例上执行 Groovy 代码。它使您可以访问 Sling 和 JCR API,还允许您与 OSGi 服务进行交互。
它很容易使用,只需安装它,打开控制台页面,输入你的脚本并执行它。
它为许多常用对象提供了开箱即用的绑定,例如resourceResolver、session、pageManager、queryBuilder、slingRequest 等。
它还提供了许多方便的方法,使 Sling 和 JCR API 更易于使用,以及一个非常简单的实用程序,允许您获取对 OSGi 服务的引用。
您询问了ResourceResolverFactory,以下是如何在脚本中获得一个:
def resourceResolverFactory = getService("org.apache.sling.api.resource.ResourceResolverFactory")
控制台甚至可以为你生成这段代码,它有一个很好的自动完成功能:
查看the project on GitHub 了解更多信息。
请注意,控制台本身使用了一堆 OSGi 捆绑包,因此代码实际上并不是独立的,因为它不是独立于 OSGi 环境而存在的。但是,用户不需要创建包并部署它们只是为了试验代码。
AEM HTL 复制
您可能想要查看的另一个项目是AEM HTL REPL。我没有使用它,但我知道它允许您通过编写服务器端 JavaScript 来使用 WCM 使用 API。
玩弄 CRXDE
这基本上是@VAr's answer 所建议的。创建新组件或修改现有组件。
使用 JSP scriptlet 或利用 WCM Use API 的 JavaScript。您可以在 CRXDE 中执行此操作,也可以使用实际的 IDE 编写代码并使用 Vault tool 将其上传到 AEM。 IntelliJ 和 Eclipse 有一些不错的插件,可以让它更容易一些。