微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Conan - 更改现有包的配方并更新包通道

如何解决Conan - 更改现有包的配方并更新包通道

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

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

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

解决方法

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

柯南 copy 正是您要找的:

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

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

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

那个问题是从 2018 年开始的。从那时起引入了许多新功能,包括在 Artifactory 上复制工件。无论如何,https://github.com/conan-io/conan/issues 是提问的最佳地点,柯南团队会在那里回答。

我不想改变包的版本,只想改变频道。是否可以这样做而不必重新构建包?

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

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

所以你不需要更新你的包并重建它们,但正如你所见,这是一个丑陋的解决方法。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。