conan远程配置必须使用artifactory的api路径,如https://host/artifactory/api/conan/repo-name(末尾无斜杠);上传需权限、远程名、ssl配置三者对齐;推荐用虚拟仓库统一入口;上传二进制须加--all和--force,并检查max unique snapshots设置。

Conan远程配置必须用Artifactory的API路径
Conan客户端不认Artifactory普通Web路径,直接填 https://your-artifactory:8081 会报 404 Not Found 或 Connection refused。必须拼出完整的Conan API端点:
- 本地仓库:
https://your-artifactory/artifactory/api/conan/conan-local - 虚拟仓库(推荐):
https://your-artifactory/artifactory/api/conan/cpp-all - 远程仓库(如代理conancenter):
https://your-artifactory/artifactory/api/conan/conan-center
注意末尾不能带斜杠,/api/conan/ 后面必须紧跟仓库逻辑名,且该名字要和Artifactory后台创建时完全一致(大小写敏感)。
上传失败常见于权限或SSL配置不匹配
执行 conan upload 报 403 Forbidden 或 401 Unauthorized,90%不是密码错,而是以下三处没对齐:
- Artifactory中用户必须被明确赋予该仓库的
Deploy/Cache权限(仅Read不够) - Conan客户端登录时指定的远程名,必须和
conan remote add时用的名字完全一致,比如conan user -p -r myremote admin中的myremote - 如果Artifactory启用了HTTPS但证书非可信CA签发,Conan默认拒绝连接;需在客户端加
--insecure或把证书加到系统信任链,否则报SSL: CERTIFICATE_VERIFY_FAILED
虚拟仓库是实际使用中唯一靠谱的入口
别直接往 conan-local 上传、也别让CI去读 conan-center 远程地址。真实工作流依赖虚拟仓库聚合:
- 开发机
conan remote add cpp-virtual https://a.b.c/artifactory/api/conan/cpp-virtual - 所有
conan install和conan upload都只操作这一个远程 - Artifactory后台把
cpp-virtual虚拟仓库设为:包含conan-local(优先)、conan-center(fallback)
这样既避免手动切远程,又能让未命中私有包时自动回退到公共源——但前提是虚拟仓库的“Repository Order”里本地库排第一,否则上传可能被路由到远程仓库导致失败。
上传预编译二进制必须显式指定 --all 和 --force
用 conan upload Hello/0.1@user/channel 默认只传 recipe(conanfile.py),不会上传 package() 生成的二进制。漏掉这个就等于只传了说明书,没传成品:
-
--all:强制上传 recipe + 所有已构建的二进制包(按settings匹配) -
--force:覆盖同名版本(Artifactory默认拒绝覆盖,需在仓库配置里勾选Enable Token Authentication并开启Allow Content Override) - 若只上传某一个配置(如
linux-x86_64),可用--query "os=Linux and arch=x86_64",但要注意查询语法必须严格匹配conan search输出的格式
真正容易被忽略的是:Artifactory仓库的 Max Unique Snapshots 如果设为 0(默认),上传同名包会静默失败,日志里只显示 “Upload completed”,但实际没存进去——得去仓库配置页手动调大。











