You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@buildr.apache.org by as...@apache.org on 2008/01/17 21:49:27 UTC

svn commit: r612975 - in /incubator/buildr/trunk/lib/java: jruby.rb rjb.rb

Author: assaf
Date: Thu Jan 17 12:49:25 2008
New Revision: 612975

URL: http://svn.apache.org/viewvc?rev=612975&view=rev
Log:
Fix for tools.jar inclusion under JRuby

Modified:
    incubator/buildr/trunk/lib/java/jruby.rb
    incubator/buildr/trunk/lib/java/rjb.rb

Modified: incubator/buildr/trunk/lib/java/jruby.rb
URL: http://svn.apache.org/viewvc/incubator/buildr/trunk/lib/java/jruby.rb?rev=612975&r1=612974&r2=612975&view=diff
==============================================================================
--- incubator/buildr/trunk/lib/java/jruby.rb (original)
+++ incubator/buildr/trunk/lib/java/jruby.rb Thu Jan 17 12:49:25 2008
@@ -65,31 +65,22 @@
           $CLASSPATH << lib
         end
       end
-      load_java_tools      
+      load_java_tools unless RUBY_PLATFORM =~ /darwin/i
       @loaded = true
       self
     end
 
     def load_java_tools
-      unless RUBY_PLATFORM =~ /darwin/i
-        home = ENV['JAVA_HOME'] or fail 'Are we forgetting something? JAVA_HOME not set.'
-        tools = File.expand_path('lib/tools.jar', home)
-        raise "Missing #{tools}, perhaps your JAVA_HOME is not correclty set" unless File.file?(tools)
-        require tools
-      end
-      
-      str_args = lambda do |obj, method_name|
-        (class << obj; self; end).module_eval <<-RUBY
-          alias_method :#{method_name}_native, :#{method_name}
-          def #{method_name}(args)
-            #{method_name}_native(args.to_java(java.lang.String))
-          end
-        RUBY
-      end
-      #str_args.call(com.sun.tools.javac.Main, :compile)
-      #str_args.call(com.sun.tools.javadoc.Main, :execute)
-      #str_args.call(com.sun.tools.apt.Main, :process)
-      com.sun.tools.doclets.standard.Standard.new # just load the class
+      home = ENV['JAVA_HOME'] or fail 'Are we forgetting something? JAVA_HOME not set.'
+      tools = File.expand_path('lib/tools.jar', home)
+      raise "Missing #{tools}, perhaps your JAVA_HOME is not correclty set" unless File.file?(tools)
+      sysloader = java.lang.ClassLoader.getSystemClassLoader
+      add_url_method = java.lang.Class.forName('java.net.URLClassLoader').
+        getDeclaredMethod('addURL', [java.net.URL].to_java(java.lang.Class))
+      add_url_method.setAccessible(true)
+      list = java.util.ArrayList.new
+      list.add(java.io.File.new(tools).toURL)
+      add_url_method.invoke(sysloader, list.toArray)
     end
 
   end

Modified: incubator/buildr/trunk/lib/java/rjb.rb
URL: http://svn.apache.org/viewvc/incubator/buildr/trunk/lib/java/rjb.rb?rev=612975&r1=612974&r2=612975&view=diff
==============================================================================
--- incubator/buildr/trunk/lib/java/rjb.rb (original)
+++ incubator/buildr/trunk/lib/java/rjb.rb Thu Jan 17 12:49:25 2008
@@ -117,7 +117,8 @@
 
 
 class Array
-  # JRuby requires casting an array, so we fake it.
+  # Converts a Ruby array into a typed Java array, argument specifies the element type.
+  # This is necessary for JRuby and causes no harm on RJB.
   def to_java(cls)
     map { |item| cls.new(item) }
   end