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