使用Stack构建某个包依赖的可执行文件
正在开发的这个项目在Bitbucket上有一个依赖。我已经在.cabal文件中把它指定为依赖,并在stack.yaml文件中指明了它的位置。这个依赖包包含一个可执行文件 that-exec,我想从主项目中构建它。有没有办法用stack实现?我尝试了 stack that-project:exe:that-exec,但它给出的信息是“Unknown project package: that-project”。
示例stack.yaml:
resolver: lts-xx.y
packages:
- .
extra-deps:
- git: [email protected]:workspace/that-project.git
commit: 0123456789abcdef0123456789abcdef01234567
注:为澄清起见,that-exec只需要被构建。它将与其他可执行文件一起打包在一个Docker镜像中,在镜像中执行。
解决方案
先做一个小澄清:你需要 that-exec 仅作为依赖的一部分来构建,还是需要从主项目中通过 stack exec that-exec 运行的可执行文件也可用?
that-project目前位于extra-deps下,而不是packages下。这就是Stack显示:Unknown project package: that-Project 的原因。也就是说,that-project被识别为一个依赖,但不是一个项目包。
stack build that-project:exe:that-exec
Stack会在packages: 里面查找that-project,但那里只发现了一个点(.)。Bitbucket依赖在extra-deps中,因此Stack不会把它作为一个项目包组件目标。
将git依赖从extra-deps移动到packages:
resolver: lts-xx.y
packages:
- .
- git: [email protected]:workspace/that-project.git
commit: 0123456789abcdef0123456789abcdef01234567
用上面的代码,这样就更容易理解了
stack build that-project:exe:that-exec
现在that-project被视为一个项目包,而不仅仅是一个额外的依赖。
站内所有文章版权归属LeftHeroAI导航站,无授权禁止任何主体转载、抄袭、复制内容,亦不得私自架设镜像站点。一经侵权,本站将通过法律途径追责。