如何使用不依赖于hackage的自定义版本的依赖项构建沙盒cabal项目(例如,从github检出)

时间:2014-09-28 14:45:39

标签: haskell cabal cabal-install

如果有一个本地签出的库,它使用应用程序使用的cabal构建。我想建立我的应用程序对抗本地库而不是hackage的东西,但我不知道如何做到这一点。这似乎是我应该做的事情,我似乎无法弄清楚如何。

沙盒

如果它重要或使事情复杂化,应用程序位于应用程序路径目录中cabal-sandbox-config文件的cabal沙箱中。

我正在努力实现的目标

我正在构建Yesod应用程序,我想调整其中一个依赖项(莎士比亚)的行为。我想根据我的调整版本构建我的应用程序。

2 个答案:

答案 0 :(得分:10)

使用专为此用例设计的cabal sandbox add-source

示例:

$ git clone https://github.com/SomeUser/SomeDependency
$ cd /path/to/my-project
$ cabal sandbox add-source /path/to/SomeDependency
$ cabal build

作为奖励,如果您稍后更新SomeDependency并尝试重建my-projectcabal会注意到并重新安装SomeDependency

答案 1 :(得分:1)

选项1:

您可以克隆项目,然后在克隆目录中运行cabal安装。 git clone https://github.com/yesodweb/shakespeare.git

这将为您提供一个目录shakespeare,其中包含.cabal文件。

所以只需输入目录并运行cabal install即可。这将安装shakespeare。现在继续安装你的项目。

关键点:

您需要先自己安装莎士比亚,这样当您编译自己的项目时,ghccabal并不会尝试自行安装莎士比亚依赖(默认情况下来自hackage)

选项2:

  • 安装hackage-server
  • 将莎士比亚(您的调整版)的副本上传到您当地的黑客
  • 编辑您的cabal配置以优先考虑本地黑客攻击haskell-hackage
  

remote-repo:hackage.haskell.org:http://hackage.haskell.org/packages/archive

     

remote-repo:local.hackage:http://local.hackage/packages/archive

如果您要调整多个软件包,这可能会有意义,但您可能最好不要这样做,因为除了其他方面,跟踪您的调整版本的更新将是一个梦魇。