Forum: JRuby Different behaviour of -r depending on what you run it from

42b570f6f4312a872c2fc671e3ddc82b?d=identicon&s=25 Trejkaz Xx (trejkaz)
on 2013-05-10 03:48
(Received via mailing list)
Hi all.

Back-story might be important here, so I will go into it a bit. Our
application embeds JRuby (technically we embed javax.script, not just
JRuby) and thus we have our own launcher for launching scripts. Now
I'm trying to fire up rspec from inside this script and the most
convenient way to do that seemed to be to deploy the gems in a jar
file, which is a pretty well-known strategy by now.

So I tried to do this:

    require File.join(File.dirname(__FILE__),
'lib/jruby-testing-gems.jar')
    require 'rspec'

This fails because gem can't find rspec.

But that's odd, I see people blogging about being able to do this:
http://watchitlater.com/blog/2011/08/rubygems-in-a-jar/
So it should work, right? I thought that perhaps it was a different in
JRuby versions, so I grabbed the same version that person was using
and tried that too, and I found that no, the command they wrote didn't
work for the same version they said it worked for:

    irb-jruby-1.6.3 -r lib/jruby-testing-gems.jar
    irb-jruby-1.7.3 -r lib/jruby-testing-gems.jar

I can't remember why I tried this next, but I tried jruby -S irb
instead:

    $ jruby-1.7.3 -r lib/jruby-testing-gems.jar -S irb
    gems.jar -S irb
    irb(main):001:0> require 'rspec'
    => true

irb --help seems to say that -r is the same as ruby -r, but
experimental evidence would appear to contradict this claim.

I am guessing that the reality is that there *is* a difference:

    jruby-1.7.3 -r something -S irb        # Requires the jar before IRB
    irb-jruby-1.7.3 -r something         # Requires IRB before the jar

And that in the latter case, because rubygems is probably loaded first
as a side-effect, the -r on the second command is too late to add any
gems. Maybe this isn't mentioned in the docs because IRB isn't part of
JRuby and the only place where this affects the behaviour is when
requiring a jar, which is of course JRuby-specific.

And following on from all this, I assume that the require statement I
originally wrote to try and require additional gems from a script is
*way* too late to have any effect at all.

TX
Please log in before posting. Registration is free and takes only a minute.
Existing account

NEW: Do you have a Google/GoogleMail, Yahoo or Facebook account? No registration required!
Log in with Google account | Log in with Yahoo account | Log in with Facebook account
No account? Register here.