Dependency Solving Example
依赖性解决示例
Using components' package.xml files to define dependencies and automatic dependencies between components.
使用组件的package.xml文件定义组件之间的依赖关系和自动依赖关系。
Dependency Solving illustrates how to specify dependencies and automatic dependencies between components in the package information files and how that influences the installation and maintenance processes.
依赖性解决说明了如何在包信息文件中指定组件之间的依赖关系和自动依赖关系,以及这如何影响安装和维护过程。
Configuring the Example Installer
配置示例安装程序
The installer configuration file, config.xml, in the config
directory specifies the text and default values used in the installer:
config目录中的安装程序配置文件config.xml指定了安装程序中使用的文本和默认值:
- The
<Name>
element sets the application name and adds it to the page name and introduction text. - <Name>元素设置应用程序名称并将其添加到页面名称和介绍文本中。
- The
<Version>
element sets the application version number. - <Version>元素设置应用程序版本号。
- The
<Title>
element sets the installer name and displays it on the title bar. - <Title>元素设置安装程序名称并将其显示在标题栏上。
- The
<Publisher>
element sets the publisher of the software (as shown in the Windows Control Panel, for example). - <Publisher>元素设置软件的发布者(例如,如Windows控制面板所示)。
- The
<StartMenuDir>
element sets the name of the default program group for the product in the Windows Start menu. - <StartMenuDir>元素在Windows“开始”菜单中设置产品的默认程序组的名称。
- The
<TargetDir>
element sets the default target directory location to be within theIfwExamples
directory in the home directory of the current user (because it uses the pre-existing variable,
@HomeDir@, as part of the value). For more information, see Predefined Variables. - <TargetDir>元素将默认目标目录位置设置为当前用户主目录中的IfwExamples目录内(因为它使用预先存在的变量@HomeDir@作为值的一部分)。有关详细信息,请参见预定义变量。
- The
<CreateLocalRepository>
element is set totrue
to create a local repository. This enables end users to run the maintenance tool after the initial installation to install additional components or to uninstall components. The changes in the installation will respect the dependencies defined in the example. - 将<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>
Creating the Example Package Information File
创建示例包信息文件
The installer package information file, package.xml, in the meta
directory specifies the components that are available for installation:
meta
目录中的安装程序包信息文件package.xml指定了可用于安装的组件:
- The
<DisplayName>
element sets the human-readable name of the component. - <DisplayName>元素设置组件的人类可读名称。
- The
<Description>
element sets the human-readable description of the component. - <Description>元素设置组件的人类可读描述。
- The
<Version>
element sets the version number of the component. - <Version>元素设置组件的版本号。
- The
<ReleaseDate>
element sets the date of release for this component version. - <ReleaseDate>元素设置此组件版本的发布日期。
- The
<SortingPriority>
element specifies the location of the component in the component tree. The tree is sorted from highest to lowest priority, with the highest priority on the top. - <SortingPriority>元素指定组件在组件树中的位置。树从最高优先级到最低优先级排序,最高优先级在顶部。
In this example, the package.xml files for the components contain additional elements that specify the dependencies. The following sections illustrate how the elements are used.
在此示例中,组件的package.xml文件包含指定依赖关系的其他元素。以下部分说明了如何使用这些元素。
Specifying Dependencies on Other Components
指定对其他组件的依赖关系
We define a dependency for Component C on Component A and Component B. Thus, if we select Component C for installation, both Component A and Component B are installed as well. We define the dependencies in the <Dependencies>
element in Component C's package.xml file as a comma-separated list of the identifiers of the components that this component depends on:
我们定义了组件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>
Specifying Automatic Dependencies on Other Components
指定对其他组件的自动依赖关系
We define an automatic dependency for Component D on Component A and Component B. Thus, if Component A and Component B are both marked for installation, Component D is automatically installed as well. We define the automatic dependency in the <AutoDependOn>
element in Component D's package.xml file:
我们定义了组件D对组件A和组件B的自动依赖关系。因此,如果组件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>
Forcing the Installation of a Component
强制安装组件
We define that Component E is always automatically installed and the end user cannot deselect it. To define this, we set the <ForcedInstallation>
element to true
in Component E's package.xml file:
我们定义组件E始终自动安装,最终用户无法取消选择。为了定义这一点,我们在组件E的package.xml文件中将<ForceInstallation>元素设置为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>
Installing Components by Default
默认情况下安装组件
We define a dependency for Component G on Component A, and we mark G as a default component. Thus, Component G is marked for installation by default, and so is Component A, because it is required by G. To define this, we set the value of the <Default>
element to true
in Component G's package.xml file:
我们定义了组件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>
Solving the Dependencies
解决依赖关系
Selecting component C for installation also selects the following components:
选择组件C进行安装也会选择以下组件:
- Component A and Component B, because Component C requires them.
- 组件A和组件B,因为组件C需要它们。
- Component D, because both Component A and Component B are marked for installation and thus the conditions for installing Component D are met.
- 组件D,因为组件A和组件B都标记为安装,因此满足安装组件D的条件。
Generating the Example Installer
生成示例安装程序
To create the example installer, switch to the example source directory on the command line and enter the following command:
要创建示例安装程序,请在命令行上切换到示例源代码目录,然后输入以下命令:
- On Windows:
..\..\bin\binarycreator.exe -c config\config.xml -p packages installer.exe
- On Linux or macOS:
../../bin/binarycreator -c config/config.xml -p packages installer
This creates the installer to the current directory.
这将创建当前目录的安装程序。
Files:
- 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. Documentation contributions included herein are the copyrights of their respective owners. The documentation provided herein is licensed under the terms of the GNU Free Documentation License version 1.3 as published by the Free Software Foundation. The Qt Company, Qt and their respective logos are trademarks of The Qt Company Ltd in Finland and/or other countries worldwide. All other trademarks are property of their respective owners.