XWiki 中是否有 API 自动安装扩展?

Is there any API to automate extension installation in XWiki?

我使用 xwiki Enterprise 7.4。安装扩展的官方方法是使用导入功能或扩展管理器。这两种方式都需要用户交互。我想自动执行扩展安装过程,因此没有用户交互来安装扩展。可能吗?我已经通过 REST API 自动创建 spaces/pages。也许可以使用 REST API 来完成,我在文档中找不到它。

为什么我需要它?很简单:我已经为我的应用程序自动化了 deployment/migration 过程的所有步骤,我也想自动化 xwiki 扩展安装。

XWiki Core 开发团队已经意识到这一点,并且在路线图中,但尚未完成。例如,您可以看到它是为 8.0 路线图计划的,但它推迟了 (http://www.xwiki.org/xwiki/bin/view/Roadmaps/Archives8xCycle/)。

Continue improving upgrade tools: Scriptable upgrades (priority 1), Simulation (priority 2)

目前似乎没有为此创建问题。如果您可以在 XWiki 平台项目中的 http://xwiki.org 创建一个 JIRA 问题,那就太好了。

现在关于扩展,有一些脚本服务可用于操作扩展,请参阅 http://extensions.xwiki.org/xwiki/bin/view/Extension/Extension+Script+Module

但是这个文档非常简洁。您可以在 https://github.com/xwiki/xwiki-platform/blob/95abd2951123431c1624c124b49ca7a88b41be00/xwiki-platform-core/xwiki-platform-extension/xwiki-platform-extension-script/src/main/java/org/xwiki/extension/script/ExtensionManagerScriptService.java#L84-L84

查看 java 代码

我没有亲自使用过这个脚本服务,所以我不能给出使用这个的真实例子 API

正如 Vincent 所指出的,您可以从 XWiki 内部使用扩展脚本服务。此脚本服务是 UI 使用的,因此 UI 所做的一切也可以由任何脚本完成(只要脚本作者拥有适当的权限)。

我刚刚在 http://extensions.xwiki.org/xwiki/bin/view/Extension/Extension+Script+Module#HNon-interactiveandsynchronousinstall 上写了一个 Velocity 示例:

{{velocity}}
## Create install request for extension with id org.xwiki.contrib:extension-tweak and version 1.3 on current wiki
#set($installRequest = $services.extension.createInstallRequest('org.xwiki.contrib:extension-tweak', '1.3', "wiki:${xcontext.database}"))

## Disable interactive mode
$installRequest.setInteractive(false)

## Start install
#set($installJob = $services.extension.install($installRequest))

## Wait until install is done
$installJob.join()
{{/velocity}}

您只需要将 Thomas 的脚本放入页面中即可。您可以为此使用 REST API。参见:http://platform.xwiki.org/xwiki/bin/view/Features/XWikiRESTfulAPI#HPageresources

然后从您的应用程序中调用 URL。

例如:您通过 REST 调用将代码放入 XWiki/AutoInstall,然后您可以使用以下 url:

调用此页面
http://localhost:8080/xwiki/bin/get/XWiki/AutoInstall

我建议使用 URL 中的 "get" 操作以避免不必要的信息。