为何这两个Cabal文件会触发循环依赖错误?
为什么这两个.cabal文件会引发循环依赖错误
首先看两个包的配置文件:
red.cabal
cabal-version: 2.4 name: red version: 0.1.0.0 library build-depends: base, blue executable red main-is: Main.hs build-depends: base ^>=4.15.1.0 hs-source-dirs: app default-language: Haskell2010
blue.cabal
cabal-version: 2.4 name: blue version: 0.1.0.0 library build-depends: base executable blue main-is: Main.hs build-depends: base ^>=4.15.1.0, red, blue hs-source-dirs: app default-language: Haskell2010
你的组件级依赖分析是对的,但问题出在cabal对多包项目的整体依赖处理逻辑:
- red包的library组件依赖blue包的library,这意味着整个red包依赖blue包
- blue包的executable组件依赖red包的library,这意味着整个blue包依赖red包
这就形成了red包 → blue包 → red包的包级循环依赖,cabal的依赖检测机制会识别这种循环并抛出错误。
如果要解决这个问题,把blue包的executable拆分出来做成独立的新包(比如blue-exe),依赖链就变成:
- red包依赖blue包
- blue-exe包依赖red包和blue包
此时包之间不再有循环,错误自然消失。
内容的提问来源于stack exchange,提问作者Cigarette Smoking Man
相关产品推荐
相关产品推荐

