Loading jars

Hello!

I have a jruby application that requires a jar file
(netcdfAll-4.3.jar). This jar depends on another jar
(joda-time-2.1.jar). Although Im able to access netcdf classes in
jruby, when a netcdf class tries to access one of the classes in
joda-time, the application fails with:

NativeException: java.lang.NoSuchMethodError:
org.joda.time.format.DateTimeFormatter.withZoneUTC()Lorg/joda/time/format/DateTimeFormatter;

Im even able to access DateTimeFormatter from my jruby code without
problem. The error only occurs if the netcdf class tries to access
the joda class.

How can I load those classes and make them available to all jars?

Thanks


Rodrigo B.

Hi Rodrigo copy this jar to java jre that your jruby uses to run it’s
the easy solution for me…

on Ubuntu…and Java 6

/usr/lib/jvm/java-6-sun-1.6.0.26/jre/lib/ext

Regards

in case you use jruby-complete.jar then try to get the joda jar first
into classloader. the problem is the packed joda within jruby which
apparently has a different version the joda-2.1

regards,
Kristian

On Fri, Jul 27, 2012 at 2:55 AM, Manuel R. Caro

Kristian,

Sorry to ask, but how do I do that? Is there a way to remove the jruby
joda package?

Thanks,

On Thu, Jul 26, 2012 at 11:05 PM, kristian [email protected] wrote:

easy solution for me…

Hello!

http://xircles.codehaus.org/manage_email


Rodrigo B.

hi,

well, the best would be to fix the jruby-core jar:
http://jira.codehaus.org/browse/JRUBY-5848

this comes without joda or any other embedded jar (yaml). so with such
a clean classloader you are on the safe side unless you use gems with
“vendored” jars like jruby-openssl, nokogiri-java, etc.

maybe your environment allows it to prepend something to the
boot-classloader which came handy for me to enforce my versions of
Xerces, Xalan and Bouncy-Castle jars on the system (oracle application
server).

if you experience such situation with a webcontainer then you can
reverse the lookup sequence of the web-classloader to first look
inside itself before going to the parent classloader. not sure (never
saw it) if that can be done for ear-file-containers (and not sure if
ruby scripting reached ejb already :))

another way is to call jruby like

$ java -cp joda.jar:jruby-complete.jar org.jruby.Main

that should do the trick as well.

within a maven project just make sure your joda artifact is declared
BEFORE the jruby-complete artifact.

maybe for jruby commandline there is a way to “prepend” jars.

quite possible that the putting the joda in the ext directory works as
well.

so there are some workarounds but I have a look on the weekend what is
missing for jruby-core jar to work properly - that would be a great
first step to offer a way for a clean classloader setup.

regards,
Kristian

On Fri, Jul 27, 2012 at 7:01 PM, Rodrigo B.

Kristian,

Thanks for the reply… but it was way over my current abilities. I
tried the – $ java -cp joda.jar:jruby-complete.jar org.jruby.Main –
but got a cannot load org.jruby.Main error, although jruby works fine.
Im working on cygwin, so maybe I can fix the classloader, but then I
really have no idea how to do that!

Do you have any simpler workaround? I used to be a good java
programmer – when java was in beta stage (and sadly this is not a
joke!).

Thanks for your help,

Rodrigo

On Fri, Jul 27, 2012 at 3:27 PM, kristian [email protected] wrote:

boot-classloader which came handy for me to enforce my versions of

apparently has a different version the joda-2.1

(netcdfAll-4.3.jar). This jar depends on another jar
the joda class.


To unsubscribe from this list, please visit:

http://xircles.codehaus.org/manage_email


Rodrigo B.

Thanks for your help… got a solution!!!

jruby -J-Xbootclasspath/a:<joda_time_dir>\joda-time-2.1.jar netcdf.rb

Rodrigo

On Fri, Jul 27, 2012 at 4:22 PM, kristian [email protected] wrote:

Kristian

On Fri, Jul 27, 2012 at 3:27 PM, kristian [email protected] wrote:

boot-classloader which came handy for me to enforce my versions of

apparently has a different version the joda-2.1

(netcdfAll-4.3.jar). This jar depends on another jar
the joda class.


To unsubscribe from this list, please visit:

http://xircles.codehaus.org/manage_email


Rodrigo B.
Integrando TI ao seu negcio
21-3010-4802/11-3010-1802

try

java -Djava.ext.dirs=joda-time -jar jruby-complete-1.6.7.2.jar

where the directory joda-time contains the joda-jar. but I do not know
how to test it myself.

indeed the -cp version did not work - sorry did not try it out before
writing :frowning:

regards,
Kristian

On Fri, Jul 27, 2012 at 8:18 PM, Rodrigo B.