باستخدام ملف فئة Java المخصص في JRuby
-
01-10-2019 - |
سؤال
أحاول تنفيذ بعض كود Java المخصص من خلال أحدث إصدار من JRuby (1.5.1) ، Ruby 1.8.7 ، مع Java 1.6.0_06. لقد جربت كل من ملف الفصل ووضعه في طريقة جرة. عندما أحاول
require 'java'
require 'path_to_class/myClass
أو
require 'java'
require 'path_to_jar/a_jar.jar
تجربة كلتا الطريقتين ، لا يمكنني الوصول إلى MyClass أو أي ملفات أخرى في ملف JAR. تؤدي الاختلافات الأخرى على الشبكة لاستيراد فئات Java إلى الخطأ التالي:
`NameError: cannot load Java class com.package.myClass from C:/jruby-1.5.1/lib/ruby/site_ruby/shared/builtin/javasupport/java.rb:51:in method_missing`
لقد راجعت أيضًا الحلول على Stackoverflow وما زلت أحصل على نفس النتيجة. أتساءل عما إذا كانت هذه مشكلة على مستوى أعمق.
المحلول
بدلاً من "الطلب" ، تريد "java_import".
require 'java'
java_import com.package.MyClass
نرى jruby: استيراد مقابل تشمل vs java_import vs include_class لمزيد من النقاش ، على سبيل المثال ، يجب أن تستخدم "java_import" بدلاً من مجرد "استيراد"
نصائح أخرى
إذا كان لديك فصل جافا com.mypackage.MyClass
في نفس المجلد ، أو في مجلد موجود على ClassPath ، يمكنك تسميته من البرنامج النصي Jruby الخاص بك مثل هذا:
require 'java'
import com.pack.MyClass
myClass = MyClass.new
إذا كان الفصل في جرة ، فعليك ذلك require
المرطبان:
require 'java'
require '/path/to/myjar.jar'
import com.pack.MyClass
myClass = MyClass.new
إذا myjar.jar
موجود على classpath ، يمكنك فقط الاستخدام require 'myjar.jar'
.
هل جربت include Java
?
انظر هذا لمزيد من التفاصيل: http://blogs.oracle.com/coolstuff/entry/using_java_classes_in_jruby
إذن هذا هو ما نجح بالنسبة لي ، لقد طلبت كل الأشياء التي اقترحها الناس ولكن ما احتاجه حقًا كان
$CLASSPATH << (Rails.root.to_s + "/path/to/dotClassFolder")
قبل بيان java_import
لذلك في نظام الملفات ، إذا كان فصلك في المجلد
Rails.root/path/to/dotClassFolder/folder/anotherFolder/MyClass.class
تضمن $CLASSPATH << (Rails.root.to_s + "/path/to/dotClassFolder")
ومن بعد java_import "folder.anotherFolder.MyClass"
نرى
من ملفات .class القسم في https://github.com/jruby/jruby/wiki/CallingJavaFromjRuby