Написание ювелирного рейкфайла, который добавляет зависимости в зависимости от RUBY_ENGINE (рубин или jruby) - PullRequest
3 голосов
/ 27 мая 2010

У меня есть Rakefile, который включает в себя:

Jeweler::Tasks.new do |gem|
  # ...
  gem.add_dependency('json')
end

Генерируемый gemspec создает гем, который не может быть установлен на jruby, потому что гем 'json' является собственным.

Для Джруби это должно быть:

Jeweler::Tasks.new do |gem|
  # ...
  gem.add_dependency('json-jruby')
end

Как условно добавить зависимость для 'json-jruby', когда RUBY_ENGINE == 'java'?

Похоже, мой единственный вариант - вручную отредактировать файл gemspec, который генерирует ювелир, чтобы добавить проверку RUBY_ENGINE. Но я бы предпочел этого избежать, так как это в первую очередь побеждает цель использования ювелира.

Есть идеи?

1 Ответ

2 голосов
/ 31 мая 2010

После еще нескольких копаний я пришел к выводу, что проблема здесь не столько в ограничении Jeweler, сколько в том, как назван самоцвет json-jruby.

В идеальном мире камень json-jruby должен называться просто json. Таким образом, когда файл gem создается под JRuby (то есть jgem build json-jruby.gem), результирующий файл gem будет называться json-1.4.3-universal-java-1.6.gem (RubyGems называет файл на основе свойства 'platform' в gemspec). При установке с соответствующей платформой в имени гема все работает прозрачно. Нет необходимости явно требовать json-jruby. RubyGems использует соответствующую версию автоматически.

Я связался с сопровождающим самоцвета json, чтобы узнать, не захочет ли он добавить json-1.4.3-universal-java-1.6.gem к своему репозиторию gemcutter, но пока вы можете скачайте выпадающий jruby json gem здесь: http://roughest.net/json-1.4.3-universal-java-1.6.gem

...