[
https://issues.apache.org/jira/browse/BUILDR-256?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=12674426#action_12674426
]
Rhett Sutphin commented on BUILDR-256:
--------------------------------------
The following monkey-patch fixes this problem. It also autoinstalls the gems
without ri or rdoc so that they install much faster and it provides information
about why buildr decided the gem needed to be installed with --trace.
I'll try to provide this as a more formal patch when I have a chance.
require 'buildr/java/bdd'
module Buildr::TestFramework::JRubyBased
protected
def jruby_gem
%{
require 'jruby'
def JRuby.gem(name, version = '>0', *args)
require 'rbconfig'
jruby_home = Config::CONFIG['prefix']
expected_version = '#{TestFramework::JRubyBased.version}'
unless JRUBY_VERSION >= expected_version
fail "Expected JRuby version \#{expected_version} installed at
\#{jruby_home} but got \#{JRUBY_VERSION}"
end
require 'rubygems'
begin
Kernel.gem name, version
rescue LoadError, Gem::LoadError => e
#{'puts "Gem #{name} (#{version}) not found. Installing. (Message:
#{e.message}.)"' if Buildr.application.options.trace}
require 'rubygems/gem_runner'
Gem.manage_gems
args = ['install', name, '--version', version, '--no-ri',
'--no-rdoc'] + args
begin
Gem::GemRunner.new.run(args)
rescue Gem::SystemExitException=>e
if e.exit_code == 0
#{'puts "Successfully installed. #{e.message}"' if
Buildr.application.options.trace}
else
puts "Install of \#{name} (\#{version}) failed. \#{e.message}"
raise e
end
end
Kernel.gem name, version
end
end
}
end
end
> Automatically installing gems aborts rspec test runner
> ------------------------------------------------------
>
> Key: BUILDR-256
> URL: https://issues.apache.org/jira/browse/BUILDR-256
> Project: Buildr
> Issue Type: Bug
> Affects Versions: 1.3.3
> Environment: RubyGems 1.2.0
> Reporter: Rhett Sutphin
> Priority: Minor
>
> The automatic jruby gem installer code (the template for which is created by
> the jruby_gem method in TestFramework::JRubyBased) uses Gem::GemRunner to
> automatically install gems. GemRunner (at least in RubyGems 1.2.0) always
> throws Gem::SystemExitException when it completes. This aborts the runner
> and returns control to buildr. Buildr then fails with an exception because
> result.yaml doesn't exist.
> Workaround: each run will successfully install one of the gems, so you can
> run the test several times to install all the gems. Alternatively, you can
> manually install the necessary gems using jruby -S gem install.
--
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.