使用Conan是否必须联网?配置本地Artifactory仍拉取公网源码报错如何解决
Conan 硬编码源码下载地址问题解答
问题根源
这个问题是Conan 1.x时期旧社区维护包的普遍设计,既不违背Conan的设计初衷,也不是你的使用方式有误,属于旧版本包的维护策略限制:
- 你上传到本地Artifactory的只有Conan配方(
conanfile.py)和对应配置的预编译二进制包,旧版社区配方默认不会将源代码一同打包上传到Conan远程源。只有当触发本地源码构建逻辑(比如本地编译配置和预存的二进制包配置不匹配、找不到对应版本的二进制包)时,Conan才会执行配方里的source()方法拉取源码。 - 你遇到的403错误是因为Boost官方早已下线了Bintray上的历史版本存档,硬编码的公网地址已经失效。
可行解决方案
- 配置全局源码镜像规则:在你的本地Artifactory中创建通用远程仓库代理托管Boost源码,之后修改Conan全局配置
conan.conf,添加tools.get:mirrors规则将原有Bintray域名映射到你的本地Artifactory代理地址,不需要修改原有配方即可自动走本地源拉取源码。 - 重打包Boost配方:修改
conanfile.py中的源码地址为你本地私有源的地址,或是直接将对应版本的Boost源码打包进Conan包,重新上传到本地Artifactory后所有拉取都会走本地源。 - 升级到Conan 2.x和新版ConanCenter包:Conan 2.x生态下的官方维护包已经全部废弃了硬编码公网下载地址的
source()逻辑,所有源码都会统一上传到Conan远程源,配置本地源后无需访问公网即可完成所有包的拉取和构建。
内容的提问来源于stack exchange,提问作者Roee
相关产品推荐
相关产品推荐

