柯南-更改现有包的配方并更新包频道

  • 本文关键字:更新 包频道 频道 柯南 c++ conan
  • 更新时间 :
  • 英文 :


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

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

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

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

柯南副本是你正在寻找的:

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

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

我搜索了一个方法来做到这一点,只发现了以下内容:https://github.com/conan-io/conan/issues/3283.

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

我不想更改包的版本,只想更改频道。不需要重新构建程序包就可以做到这一点吗?

Conan复制命令复制所有内容,包括包依赖项,因此不需要重新构建。然而,你也必须更新它们的依赖关系,这是行不通的。当你的包被缓存时,你也需要更新它们的依赖关系引用,而不仅仅是更新配方并神奇地解决它

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

因此,您不需要更新包并重新构建它们,但正如您所看到的,这是一个丑陋的解决方案。

最新更新