ソースが github で管理されている単純な公開された gem を作成しました。コミットすると Travis CI でビルドが実行されます。
最近、たまたま C 拡張を使用する依存関係を追加しました。JRuby でのビルドが失敗し、Travis から報告された次のメッセージが表示されました。
Gem::Installer::ExtensionBuildError: ERROR: Failed to build gem native extension.
/home/travis/.rvm/rubies/jruby-1.7.3-d18/bin/jruby extconf.rb
NotImplementedError: C extension support is not enabled. Pass -Xcext.enabled=true to JRuby or set JRUBY_OPTS or modify .jrubyrc to enable.
(root) at /home/travis/.rvm/rubies/jruby-1.7.3-d18/lib/ruby/shared/mkmf.rb:8
require at org/jruby/RubyKernel.java:1019
(root) at extconf.rb:1
ここに 2 つの関連する問題があります。
1)フラグ.travis.yml
を使用するように (おそらくファイルを介して) travis に指示する方法に途方に暮れています。-Xcext.enabled=true
それが可能かどうかはわかりませんが、おそらくリリース前に、JRuby で自分のマシンでビルドを試して、JRuby でテストがパスすることを確認できると思います。
更新: http://about.travis-ci.org/docs/user/languages/ruby/によると、JRuby の運用環境で問題が発生する可能性があるため、Travis のポリシーと直接行うことはできません。
2 番目の更新: ただし、受け入れられた回答を参照してください。Travis のポリシーは上書きされる可能性があるようです。
2) C 拡張フラグを有効にすることによってのみ機能するサポート コードが、Travis でビルドできたとしても、私のライブラリが JRuby で機能すると主張できるほど十分に標準と見なされるかどうかはわかりません。「適切に」サポートできるようになるまで、JRuby のサポートをやめたほうがよいのでしょうか。それとも、「JRuby で動作 - C 拡張機能を有効にすれば」と宣言するだけですか?
私の宝石の現在の依存関係の場合、回避策を見つけることができました。しかし、私はおそらくいくつかの C 拡張機能を gem 自体に追加する予定です (いくつかの計算を繰り返してパフォーマンスを改善するため)。また、Java ネイティブ サポートを追加する時間も近い将来にはありません。ジャバ。したがって、gem に C ネイティブ拡張機能があり、同等の Java 拡張機能がない場合、ベスト プラクティスと見なされるもの、または少なくとも JRuby ユーザーにとって礼儀正しいと見なされるものを理解したいと思います。
Travis のエラー メッセージを Google で検索しても、修正案が見つかりません。スタック オーバーフローを確認すると、特定のネイティブ拡張 gem をシステムで動作させようとしている JRuby ユーザーから多くの質問が寄せられています。