组件别名示例

使用安装程序的 aliases.xml 文件定义组件别名及其与其他别名和组件之间的关系。

组件别名 说明了如何指定组件别名以及它们如何影响命令行使用的安装和维护过程。

配置示例安装程序

config 目录中的安装程序配置文件,config.xml,指定了安装程序中使用的文本和默认值。

  • <Name> 元素设置应用程序名称,并将其添加到页面名称和简介文本中。
  • <Version> 元素设置应用程序版本号。
  • <Title> 元素设置安装程序名称,并在标题栏上显示。
  • <Publisher> 元素设置软件的发布者(例如,在 Windows 控制面板中显示的发布者)。
  • <StartMenuDir> 元素设置 Windows 开始 菜单中产品的默认程序组名称。
  • <TargetDir> 元素设置默认目标目录位置为当前用户的主目录中的 IfwExamples 目录内(因为它使用了现有的变量 , @HomeDir@,作为值的一部分)。有关更多信息,请参阅 预定义变量
  • <AliasDefinitionsFile> 元素设置为 aliases.xml,以便告诉安装程序别名定义的来源。
<?xml version="1.0" encoding="UTF-8"?>
<Installer>
    <Name>Component Alias Example</Name>
    <Version>1.0.0</Version>
    <Title>Component Alias Example</Title>
    <Publisher>Qt-Project</Publisher>
    <StartMenuDir>Qt IFW Examples</StartMenuDir>
    <TargetDir>@HomeDir@/IfwExamples/componentalias</TargetDir>
    <AliasDefinitionsFile>aliases.xml</AliasDefinitionsFile>
</Installer>

在此示例中,aliases.xml 文件声明了三个组件别名。两个别名 set1set2 需要可用组件的子集,而 set-full 需要前两个别名,因此需要的所有组件。

<?xml version="1.0"?>
<Aliases>
    <Alias>
        <Name>set1</Name>
        <DisplayName>Component Set 1</DisplayName>
        <Description>Alias for components A, B, and C</Description>
        <Version>1.0.0</Version>
        <Virtual>false</Virtual>
        <RequiredComponents>componentA,componentB,componentC</RequiredComponents>
    </Alias>
    <Alias>
        <Name>set2</Name>
        <DisplayName>Component Set 2</DisplayName>
        <Description>Alias for components D, and E</Description>
        <Version>1.0.0</Version>
        <Virtual>false</Virtual>
        <RequiredComponents>componentD,componentE</RequiredComponents>
    </Alias>
    <Alias>
        <Name>set-full</Name>
        <DisplayName>Full Component Set</DisplayName>
        <Description>Alias for full installation</Description>
        <Version>1.0.0</Version>
        <Virtual>false</Virtual>
        <RequiredAliases>set1,set2</RequiredAliases>
    </Alias>
</Aliases>

关于别名定义文件语法的完整参考,请参阅 别名定义文件

创建示例包信息文件

meta 目录中的安装程序包信息文件,package.xml,指定了可安装的组件。

  • <DisplayName> 元素设置组件的可读名称。
  • <Description> 元素设置组件的可读描述。
  • <Version> 元素设置组件的版本号。
  • <ReleaseDate> 元素设置此组件版本的发布日期。

从命令行引用组件别名

声明的组件别名可以使用安装程序的命令行界面中的 searchinstall 命令。

搜索可用的组件别名

默认情况下,search 命令将首先搜索可用的别名,然后是普通组件。

$ installer search

该命令将打印出一个声明在别名定义文件中的别名的表格。

Name: set-full
Display name: Full Component Set
Description: Alias for full installation
Version: 1.0.0
Components:
Required aliases: set1,set2
========================================
Name: set1
Display name: Component Set 1
Description: Alias for components A, B, and C
Version: 1.0.0
Components: componentA,componentB,componentC
Required aliases:
========================================
Name: set2
Display name: Component Set 2
Description: Alias for components D, and E
Version: 1.0.0
Components: componentD,componentE
Required aliases:
安装可用的组件别名

可以使用 install 命令来安装用组件别名引用的组件

$ installer install set1

此命令在实际上相当于通过名称显式选择组件

$ installer install componentA componentB componentC

在选择安装的别名时,组件更改摘要将分别展示选择别名的组件部分,以区别于手动选择

$ installer install set1 componentD

这将输出以下组件更改摘要

Components selected by alias "set1":
componentA
componentB
componentC
Selected components without dependencies:
componentD

<RequiredComponents> 属性不声明对组件的硬依赖,因此可以从别名中单独更新或卸载它们

$ maintenancetool remove componentA

之后,再次选择安装 set1 别名时,也会选择 componentA 进行重新安装。

虚拟组件别名

组件别名可以被声明为 <Virtual>。这与虚拟组件类似,因此用户不能手动选择它们,并且不会显示在组件搜索结果中。这样的别名必须由具有 <RequiredAliases> 属性的其他别名包含。

组件别名的可选依赖

除了如本例中所示,使用 <RequiredComponents><RequiredAliases> 声明的依赖之外,别名还可以声明使用 <OptionalComponents><OptionalAliases> 属性的可选依赖。这些属性与要求的不同之处在于,如果引用的组件或别名对安装者来说不为人知,它们不会导致声明要求的别名变得不可选择。

这为包装器声明依赖项提供了一些灵活性。例如,可能期望安装程序使用可选的存储库,该存储库包含组件别名可选依赖的组件,但是当存储库禁用时,别名也应可用于安装。

生成示例安装程序

要创建示例安装程序,请在命令行中切换到示例源目录,并输入以下命令

  • 在 Windows 上
    ..\..\bin\binarycreator.exe -c config\config.xml -p packages installer.exe
  • 在 Linux 或 macOS 上
    ../../bin/binarycreator -c config/config.xml -p packages installer

这将在当前目录中创建安装程序。

文件

©2021 The Qt Company Ltd. 本文档中的贡献版权属于各自的拥有者。本提供的文档是根据由自由软件基金会发布的 GNU 自由文档许可证版本 1.3 的条款许可。Qt Company, Qt 及其各自的标志是芬兰和/或其他国家/地区的 The Qt Company Ltd 的商标。所有其他商标属于其各自的所有者。