如何以编程方式检索 AEM/CQ5 的产品版本

How to programmatically retrieve product version of AEM/CQ5

AEM 5.6.1.

我有一个包裹。我希望能够 'sniff' user/administraor 在尝试安装软件包时使用的 AEM 版本。

该版本可在前端通过工具 -> Web 控制台 -> 主要 -> 产品信息获得

我很感激我可以解析上面的页面并提取,但肯定有更优雅的方法来做到这一点?

我已经查看了 Adob​​e 文档中的软件包:(我会 post 链接但是抱怨我没有足够的声誉)并且很好地寻找了 SO。

我最接近的是通过此文档:https://helpx.adobe.com/experience-manager/using/programmatically-accessing-cq-content-using.html 并假设在 CRX @ /etc/packages/day:

中找到了详细信息

代表典型安装?

产品信息存储在节点“/libs/cq/core/productinfo”上,您可以从这些节点读取信息。

您没有指定在安装软件包时是否具有存储库访问权限。如果您希望通过 HTTP 作为 JSON 的数据,只需点击带有“.json”扩展名的路径

来源: 检查了 aem developer chrome 插件发出的网络请求

AEM 的当前版本通过 [10=] 中描述的 ProductInfoService 提供此信息,它可以 return 多个 ProductInfo 对象。

这在 5.6.1 中已经可用,也可以通过 /system/console/status-productinfo 的 OSGi 控制台获得。

[1] https://docs.adobe.com/docs/fr/aem/6-0/develop/ref/javadoc/com/adobe/granite/license/package-summary.html

我们可以从 CRXDE

中的节点“/libs/cq/core/productinfo”读取 AEM 产品版本
def productInfo = request.resourceResolver.getResource("/libs/cq/core/productinfo")?.adaptTo(ValueMap) ?: [:]

String version = productInfo["shortVersion"]

参考:https://forums.adobe.com/thread/2338675

要以编程方式检索任何 运行 AEM 实例的产品版本,可以通过以下代码片段完成。

@Reference 
private ProductInfoProvider productInfo;

String version = productInfo.getProductInfo().getShortVersion();

首先我们需要注入 ProductInfoProvider 服务或定义 ProductInfoProvider 的引用到您的服务中,并使用以下函数调用来获取版本信息为 productInfo.getProductInfo().getShortVersion();