我正在帮助开发一系列相互关联的宝石。因此,我不希望它们彼此之间存在硬依赖关系,但我要希望它们在开发中运行彼此使用的测试。简单吧?只需在gemspec中使用add_development_dependency
,对吧?好吧,有一点点皱纹 - git存储库包含所有的gem,所以我希望Gemfile指向gem的本地副本。这与硬依赖有关。在gemspec中,我有这条线用于我的硬依赖:
s.add_dependency "mygem-core"
然后在Gemfile中,我有这一行:
gem "mygem-core", :path => "../mygem-core"
这完美无缺。当我推出这个包时,存在依赖性,当我测试时,它将使用mygem-core的本地副本。问题是当我把它放在gemspec中时:
s.add_development_dependency "mygem-runtime"
然后在Gemfile中:
gem "mygem-runtime", :path => "../mygem-runtime"
然后当我运行bundle时出现错误:
You cannot specify the same gem twice coming from different sources. You specified that mygem-packager (>= 0) should come from source at ../mygem-packager and
是的,这不是最后的错字。第二个“位置”的末端实际上有一个空白的空白空间。有没有聪明的方法可以解决这个问题?我想将此添加为开发依赖项,并使用本地源。我错过了什么?
答案 0 :(得分:9)
将gem留在 .gemspec 清单中并将其放在:development 组下的 Gemfile 中可能会更好。
# Gemfile
source :rubygems
gemspec
gem "mygem-runtime", :path => '../mygem-runtime', :group => :development
答案 1 :(得分:1)
如果您使用Gemfile来指定gem的本地路径,则需要将其从gemspec中删除。 Bundler将解析gemspec并添加bundler正在安装的依赖项,因此它就像指定了两次gem一样。