سؤال

أحاول تنفيذ بعض كود 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

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top