依赖解决示例
使用组件的 package.xml 文件来定义依赖项以及组件之间的自动依赖项。
依赖解决 说明了如何在包信息文件中指定组件之间的依赖项和自动依赖项,以及这对安装和维护过程的影响。
配置示例安装程序
安装程序配置文件 config.xml 位于 config
目录中,它指定了安装程序中使用的文本和默认值
- 元素
<Name>
设置应用程序名称,并将其添加到页面名称和介绍文本中。 - 元素
<Version>
设置应用程序版本号。 - 元素
<Title>
设置安装程序名称,并在标题栏中显示。 - 元素
<Publisher>
设置软件的发布者(例如,在 Windows 控制面板中显示的名称)。 - 元素
<StartMenuDir>
设置 Windows 开始 菜单中产品默认程序组的名称。 - 元素
<TargetDir>
设置默认目标目录位置为当前用户主目录中的IfwExamples
目录内(因为它将预定义变量,
@HomeDir@, 作为值的一部分使用)。有关更多信息,请参阅 预定义变量。
- 元素
<CreateLocalRepository>
设置为true
以创建本地仓库。这可以使用户在第一次安装后运行维护工具以安装其他组件或卸载组件。安装中的更改将尊重示例中定义的依赖项。
<?xml version="1.0" encoding="UTF-8"?> <Installer> <Name>Dependency Solving Example</Name> <Version>1.0.0</Version> <Title>Dependency Solving Example</Title> <Publisher>Qt-Project</Publisher> <StartMenuDir>Qt IFW Examples</StartMenuDir> <TargetDir>@HomeDir@/IfwExamples/dependencies</TargetDir> <CreateLocalRepository>true</CreateLocalRepository> <InstallActionColumnVisible>true</InstallActionColumnVisible> </Installer>
创建示例包信息文件
安装程序包信息文件 package.xml 位于 meta
目录中,它指定了可安装的组件
- 元素
<DisplayName>
设置组件的可读名称。 - 元素
<Description>
设置组件的可读描述。 - 元素
<Version>
设置组件的版本号。 - 元素
<ReleaseDate>
设置此组件版本的发布日期。
- 元素
<SortingPriority>
指定组件在组件树中的位置。该树按照从高到低的优先级排序,最高优先级的在顶部。
在此示例中,组件的 package.xml 文件包含指定依赖项的额外元素。以下各节说明了如何使用这些元素。
指定对其他组件的依赖项
我们为 组件 C 在 组件 A 和 组件 B 上的依赖项进行了定义。因此,如果我们选择安装组件 C,组件 A 和组件 B 也将同时安装。我们将在组件 C 的 package.xml 文件中的 <Dependencies>
元素中将依赖项定义为组件标识符的逗号分隔列表,该组件依赖于这些组件
<?xml version="1.0"?> <Package> <DisplayName>Component C (depends on A and B)</DisplayName> <Description>This component depends on Component A and Component B. Selecting this component for installation also marks Component A and Component B for installation, which in turn marks Component D, because it has an automatic dependency on Component A and Component B.</Description> <Dependencies>componentA, componentB</Dependencies> <Version>1.0.0</Version> <ReleaseDate>2014-08-25</ReleaseDate> <SortingPriority>80</SortingPriority> </Package>
指定对其他组件的自动依赖项
我们定义了组件A和组件B对组件D的自动依赖。因此,如果组件A和组件B都标记为安装,组件D也会自动安装。我们通过在组件D的package.xml文件中的<AutoDependOn>
元素定义自动依赖。
<?xml version="1.0"?> <Package> <DisplayName>Component D (auto depends on A and B)</DisplayName> <Description>This component has an automatic dependency on Component A and Component B. If both A and B are marked for installation, this component is also installed.</Description> <AutoDependOn>componentA, componentB</AutoDependOn> <Version>1.0.0</Version> <ReleaseDate>2014-08-25</ReleaseDate> <SortingPriority>70</SortingPriority> </Package>
强制安装组件
我们定义组件E始终自动安装,并且最终用户无法取消选择。要定义此操作,我们将在组件E的package.xml文件中将<ForcedInstallation>
元素设置为true
。
<?xml version="1.0"?> <Package> <DisplayName>Component E (forced)</DisplayName> <Description>This is a forced component that is always installed.</Description> <ForcedInstallation>true</ForcedInstallation> <Version>1.0.0</Version> <ReleaseDate>2014-08-25</ReleaseDate> <SortingPriority>60</SortingPriority> </Package>
默认安装组件
我们为组件G定义对组件A的依赖,并将G标记为默认组件。因此,组件G默认标记为安装,组件A也是如此,因为它是由G需要的。要定义此操作,我们将在组件G的package.xml文件中将<Default>
元素的值设置为true
。
<?xml version="1.0"?> <Package> <DisplayName>Component G (default, depends on A, dependency added dynamically)</DisplayName> <Description>By default, this component is selected for installation. It depends on component A. Dependency is added from inside component script.</Description> <Default>true</Default> <Version>1.0.0</Version> <ReleaseDate>2014-08-25</ReleaseDate> <Script>installscript.js</Script> <SortingPriority>30</SortingPriority> </Package>
解决依赖关系
选择安装组件C时,还将选择以下组件
- 组件A和组件B,因为组件C需要它们。
- 组件D,因为组件A和组件B都标记为安装,因此满足安装组件D的条件。
生成示例安装程序
要创建示例安装程序,请在命令行切换到示例源目录并输入以下命令
- 在Windows上
..\..\bin\binarycreator.exe -c config\config.xml -p packages installer.exe
- 在Linux或macOS上
../../bin/binarycreator -c config/config.xml -p packages installer
这将在当前目录创建安装程序。
文件
- dependencies/config/config.xml
- dependencies/dependencies.pro
- dependencies/packages/componentA/data/installcontent.txt
- dependencies/packages/componentA/data/installcontentA.txt
- dependencies/packages/componentA/meta/package.xml
- dependencies/packages/componentB/data/installcontentB.txt
- dependencies/packages/componentB/meta/package.xml
- dependencies/packages/componentC/data/installcontentC.txt
- dependencies/packages/componentC/meta/package.xml
- dependencies/packages/componentD/data/installcontentD.txt
- dependencies/packages/componentD/meta/package.xml
- dependencies/packages/componentE/data/installcontentE.txt
- dependencies/packages/componentE/meta/package.xml
- dependencies/packages/componentF.subcomponent1.subsubcomponent1/data/installcontentF_1_1.txt
- dependencies/packages/componentF.subcomponent1.subsubcomponent1/meta/package.xml
- dependencies/packages/componentF.subcomponent1.subsubcomponent2/data/installcontentF_1_2.txt
- dependencies/packages/componentF.subcomponent1.subsubcomponent2/meta/package.xml
- dependencies/packages/componentF.subcomponent1/data/installcontentF_1.txt
- dependencies/packages/componentF.subcomponent1/meta/package.xml
- dependencies/packages/componentF.subcomponent2.subsubcomponent1/data/installcontentF_2_1.txt
- dependencies/packages/componentF.subcomponent2.subsubcomponent1/meta/package.xml
- dependencies/packages/componentF.subcomponent2.subsubcomponent2/data/installcontentF_2_2.txt
- dependencies/packages/componentF.subcomponent2.subsubcomponent2/meta/package.xml
- dependencies/packages/componentF.subcomponent2/data/installcontentF_2.txt
- dependencies/packages/componentF.subcomponent2/meta/package.xml
- dependencies/packages/componentF/data/installcontentF.txt
- dependencies/packages/componentF/meta/package.xml
- dependencies/packages/componentG/data/installcontentG.txt
- dependencies/packages/componentG/meta/installscript.js
- dependencies/packages/componentG/meta/package.xml
©2021 The Qt Company Ltd. 本文件内包含的文档贡献的版权归其各自所有者所有。本文件提供的文档是根据Free Software Foundation发布、经修改的GNU自由文档许可协议第1.3版许可的。Qt公司和Qt及其相应标志是Qt公司有限公司在芬兰和其他国家的商标。所有其他商标属于其各自所有者。