mygem.gemspec 中可能有 git 分支依赖吗?
我在想类似于以下内容的事情:
gem.add_runtime_dependency 'oauth2', :git => '[email protected]:lgs/oauth2.git'
...但这不起作用。
这是不可能的,而且可能永远不会,因为对于 RubyGems 来说,允许 gem 开发人员要求用户安装特定的版本控制系统来访问 gem 是相当严厉的。 Gems 应该是独立的,具有最少的依赖关系,以便人们可以在尽可能广泛的应用程序中使用它们。
如果您想为自己的内部项目执行此操作,我的建议是使用Bundler,它对此支持得很好。
在需要 oauth2 gem 的 gem 中运行此命令。
git submodule add [email protected]:lgs/oauth2.git lib/oauth2
如果您需要与默认分支不同的分支
cd lib/oauth2 && git checkout <branchname_or_ref>
cd .. && git add lib/oauth2
git commit -m "adding outh2 submodule"
在您的 gemspec 中将其添加到您的要求版本行上方
$:.push File.expand_path('../lib/oauth2/lib', __FILE__)
此外,您还需要将 oauth2 gem 的所有运行时依赖项添加到您的 gemspec 中。我还没有找到解决这个问题的方法。
这就是我所做的,它对我们有用,因为我们的 gem 需要通过 git,所以我不确定这是否适用于 rubygems 发布的 gem。
gem 'gem_name', '>=0.1.1', git: 'repository_link ', branch: 'brnach_name'
然后运行
bundle install
现在您可以在 gemspec 文件中提及它,无需添加版本,因为它已经从 Gemfile.lock 中选择了
spec.add_runtime_dependency 'sms_service'
确保将 gemspec
保留在 Gemfile 的底部。因此,它将首先安装必要的 gem,然后将它们添加为您的 gem 的依赖项。
source "https://rubygems.org"
git_source(:github) {|repo_name| "https://github.com/#{repo_name}" }
gem 'sms_service', '>=0.1.1', git: 'repository link', branch: 'branch_name'
gemspec