En utilisant le fichier de classe Java personnalisée dans JRuby
-
01-10-2019 - |
Question
Je suis en train d'exécuter un code Java personnalisé grâce à la dernière version de JRuby (1.5.1), Ruby 1.8.7, avec Java 1.6.0_06. Je l'ai essayé à la fois le fichier de classe et de le mettre dans une méthode de pot. Lorsque je tente
require 'java'
require 'path_to_class/myClass
ou
require 'java'
require 'path_to_jar/a_jar.jar
Essayer les deux méthodes, je ne peux pas accéder aux myClass, ni aucun autre fichier dans le fichier jar. D'autres variations sur le net pour l'import des classes java conduisent à l'erreur suivante:
`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`
J'ai également vérifié les solutions sur StackOverflow et je reçois toujours le même résultat. Je me demande si cela pourrait être un problème à un niveau plus profond.
La solution
Au lieu de 'besoin', vous voulez 'java_import'.
require 'java'
java_import com.package.MyClass
Voir JRuby: import vs vs comprennent java_import vs include_class pour une discussion plus approfondie par exemple pourquoi vous devriez utiliser « java_import » au lieu de simplement « importer »
Autres conseils
Si vous avez un com.mypackage.MyClass
de classe Java dans le même dossier ou dans un présent dossier sur le chemin de classe, vous pouvez l'appeler depuis votre script JRuby comme ceci:
require 'java'
import com.pack.MyClass
myClass = MyClass.new
Si la classe est dans un pot, vous devez require
le pot:
require 'java'
require '/path/to/myjar.jar'
import com.pack.MyClass
myClass = MyClass.new
Si myjar.jar
est sur le chemin de classe, vous pouvez simplement utiliser require 'myjar.jar'
.
Avez-vous essayé include Java
?
Voir ce pour plus de détails: http://blogs.oracle.com/coolstuff/entry / using_java_classes_in_jruby
Voici donc ce qui a fonctionné pour moi, j'avais tous les trucs nécessaires que les gens ont suggéré, mais ce que je avais vraiment besoin était
$CLASSPATH << (Rails.root.to_s + "/path/to/dotClassFolder")
avant l'instruction java_import
dans le système de fichiers, si votre classe était était dans le dossier
Rails.root/path/to/dotClassFolder/folder/anotherFolder/MyClass.class
Inclure $CLASSPATH << (Rails.root.to_s + "/path/to/dotClassFolder")
puis java_import "folder.anotherFolder.MyClass"
Voir
.class section https://github.com / JRuby / JRuby / wiki / CallingJavaFromJRuby