这个 1.17 版本带来了好消息!新的锁定文件功能已经到来,同时还有新的 conan graph 命令和用于配方和包修订版本的包 ID 模式。我们还正在进行用户调查以收集一些反馈。让我们来看看吧!

Conan 用户调查

我们正在进行一项用户调查,以收集来自社区的一些反馈。如您所知,Conan 包管理器是完全开源的,我们不会捕获您使用情况的任何信息。这项调查将帮助我们相应地调整我们在不同领域(开发、支持等)的资源,估算一些功能请求的重要性、错误或回归的影响,以及总体上确定开发的优先级。

请花2分钟时间填写调查问卷,并帮助 Conan 项目。调查结果将仅供 JFrog-Conan 团队内部使用,以改进 Conan 以更好地满足您的需求。谢谢!

使用锁定文件冻结您的依赖项

当依赖关系图中的包被修改并创建新版本或修订版本时,有时需要测试该新版本在更大的产品或项目中是否运行良好,即当该包是更大依赖关系图的一部分时。

依赖于已修改包的包可能需要重新构建,但是如果其他内容发生了更改(发布了另一个上游依赖项的新版本),则无法实现可重复构建。

Conan 锁定文件通过存储依赖关系图的信息来实现该功能。此信息包括确切的版本、修订版本、选项和配置。由于每个 Conan 图根据每个使用的配置文件的输入设置和选项而有所不同,因此每个配置将有一个锁定文件。

非确定性依赖关系图

即使 conanfile 配方中的依赖项定义不是完全确定的,例如使用版本范围或使用包修订版本时,锁定文件也有助于实现确定性构建。

查看我们文档中关于锁定文件的新部分,以了解有关此强大功能的更多信息!

管理锁定文件和图形中依赖项的更新

锁定文件的一种应用是能够将属于依赖关系图的一个包中的更改传播到其受影响的下游使用者。这可以通过上述锁定文件和包 ID 修订版本模式来实现(在下一部分中阅读更多内容)。

操作锁定文件的主要目的是协调受影响包的重建,在隔离的环境(例如不同的从属服务器)中构建它们。因此,您可以获得隔离的包创建结果,然后更新主锁定文件以继续处理其余包,确保后续编译将使用先前构建的包。

为了实现这一点,我们发布了新的 conan graph 命令,它将允许您

  • 为给定图形生成锁定文件,而无需运行完整的安装(无需下载或重建):conan graph lock

  • 更新在一个锁定文件中已重建的包,生成一个新的锁定文件:conan graph update-lock

  • 清除锁定文件中已修改的包,以执行将标记包为已修改的新操作:conan graph clean-modified

  • 计算为了实现给定锁定文件的结果而必须重新构建的包:conan graph build-order

查看文档中命令的完整参考。您还可以在此处找到使用锁定文件的完整示例:https://github.com/conan-io/examples#lockfiles

用于配方和包修订版本的包 ID 模式

我们增加了包 ID 版本方案的可能性,包括 recipe_revision_mode()package_revision_mode()。这些模式将使包的包 ID 取决于配方修订版本(对于第一种模式)以及要求的包 ID 和包修订版本(对于最新模式)。

    def package_id(self):
        # <name>/<version>@<user>/<channel>#<RREV> for all the dependencies
        self.info.requires.recipe_revision_mode()

        # <name>/<version>@<user>/<channel>#<RREV>:<package_id>#<PREV>
        # for the "mypkgdep" dependency
        self.info.requires["mypkgdep"].package_revision_mode()

与其他模式一样,这可以分别应用于每个配方或在 Conan 配置文件中全局配置为默认版本方案。

conan.conf

[general]
default_package_id_mode=package_revision_mode

为了实现完全可重复的图形,这些模式与锁定文件非常重要,因为此模式确保包已使用上游依赖项中的完全相同的配方修订版本和包修订版本构建。换句话说,这将实现精确的二进制寻址(包修订版本是内容的哈希值),这意味着如果上游二进制文件被重新构建,它将导致下游强制构建新的二进制文件。

Apple clang 11.0 支持

Apple 在 6 月份发布了 XCode 11.0 的新测试版,并且将在几个月内保持测试版状态。但是,一些勇敢的开发人员已经开始利用新版本,因此我们在默认的 settings.yml 文件中包含了新的 apple-clang 11 版本。

请记住,此文件中的值是开源包的约定,但您可以自定义设置以满足您的需求。

可用性改进

已经进行了一些改进和弃用,以支持新语法。

  • conan copy|download|upload 命令可用于指示完整引用,而不是 --package 标志(现已弃用)。请记住,download 命令还可以指定配方和包修订版本。

    $ conan download <name>/<version>@<user>/<channel>#<RREV>:<package_id>#<PREV> -r my_remote
    
  • conanfile.txt 配方格式现在支持为要求指示特定的配方修订版本

    [requires]
    MyPackage/1.2@user/channel#3453453453
    
  • 包搜索以解析版本范围的功能得到了改进,并且结果现在显示在安装结束时。

    $ conan install "boost/[>=1.68.0]@conan/stable"
    ...
    boost/[>=1.68.0]@conan/stable resolved to 'boost/1.70.0@lasote/stable' in remote 'conan-center'
    
  • 其他 UX 改进,例如统一的进度条、general.no_proxy 配置的弃用警告消息以及警告消息中显示的配置文件路径。

安装的统一进度条


查看更改日志中功能和修复的完整列表。

报告任何错误或分享您的反馈,在我们的问题跟踪器中打开一个新问题,不要忘记更新。祝您有个愉快的夏天!