【问题标题】:Conan - changing the recipe of existing packages and updating the package channel柯南 - 更改现有软件包的配方并更新软件包频道
【发布时间】:2021-04-13 09:29:58
【问题描述】:

我想在我的本地柯南/神器服务器中更新一些现有柯南包的频道,而无需重新编译/重建它们。

一些背景:我们有一些最初是从非本地服务器下载的包。这些包已上传到我们的本地服务器,因此我们不会依赖与第三方服务器的连接。我们将 remotes.json 文件设置为首选本地服务器而不是全局服务器,但是,出于某种原因 - 在某些站点中,包被引用到全局服务器。这一点,以及一些包在全球服务器中被更改并产生新的冲突和问题的事实,我们决定改变我们本地包的渠道。这也将有助于确保我们项目之外的任何人都不会更改包的内容(当有人从服务器更新更新的包时也发生过几次)

我们想要的是:拥有相同的柯南包,但在不同的频道:例如 - 我们想要相同的包而不是 libjpeg/9c@bincrafters/stable,而不是 libjpeg/9c@local_channel/stable。我们还需要更改包需求文件,使其依赖于我们的本地渠道而不是其他渠道。我已经搜索了一种方法,但只找到了这个:https://github.com/conan-io/conan/issues/3283。其中一个答案表明这是不可能的,因为它还需要更改包版本 - 更改包版本需要重新构建。我不想更改软件包的版本,只更改频道。是否可以这样做而无需重建包?

【问题讨论】:

    标签: c++ conan


    【解决方案1】:

    我想在我的本地柯南/神器服务器中更新一些现有柯南包的频道,而无需重新编译/重建它们。

    柯南copy就是你要找的:

    conan copy libjpeg/9c@bincrafters/stable local_channel/stable --all
    conan upload libjpeg/9c@local_channel/stable --all -r my_remote
    

    或者,您可以通过moving/copying Conan 包(工件)直接在您的 Artifactory 实例中更新。但是,它不会更新您的依赖项和本地缓存。

    我已经搜索了一种方法,但只找到了这个:https://github.com/conan-io/conan/issues/3283

    这个问题来自 2018 年。从那时起引入了许多新功能,包括在 Artifactory 上复制工件。不管怎样,https://github.com/conan-io/conan/issues是问什么的最好的地方,柯南团队会在那里回答。

    我不想更改软件包的版本,只更改频道。是否可以这样做而无需重建包?

    柯南复制命令复制所有内容,包括包依赖项,因此您无需重新构建。但是,您也必须更新它们的依赖项,这将不起作用。当您的包被缓存时,您还需要更新它们的依赖项引用,不仅更新配方而且柯南神奇地解决了它。有几个选项:

    • 全部重建。这需要时间,但至少您将拥有使用相同环境构建的包。
    • 使用alias 谎报包引用。您应该删除原始包,并创建一个别名,从新名称到旧名称:
        conan remove libjpeg/9c@bincrafters/stable -f
        conan alias libjpeg/9c@local_channel/stable libjpeg/9c@bincrafters/stable
    

    因此,您无需更新软件包并重新构建它们,但正如您所见,这是一个丑陋的解决方法。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-11-29
      • 2014-04-26
      • 2014-04-05
      • 2018-12-16
      • 2019-08-04
      • 2016-11-12
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多