是否可以从JRuby创建Java类并在Java中使用它们?

是否可以从JRuby创建Java类并在Java中使用它们?,第1张

概述我正在尝试从J Ruby扩展Lucene的Analyzer并从java中使用它.一个简单的分析器看起来像: class MyAnalyzer < Java::OrgApacheLuceneAnalysis::Analyzer def TokenStream (file_name, reader) result = StandardTokenizer.new(Version::LUC 我正在尝试从J Ruby扩展Lucene的Analyzer并从java中使用它.一个简单的分析器看起来像:

class MyAnalyzer < Java::OrgApacheLuceneAnalysis::Analyzer  def TokenStream (file_name,reader)      result = StandardTokenizer.new(Version::LUCENE_CURRENT,reader)     result = LowerCaseFilter.new(result)     result = LengthFilter.new(result,3,50)      result = StopFilter.new(result,StandardAnalyzer.Stop_WORDS_SET)     result = PorterstemFilter.new(result)     result  end end

然后我编译它:jrubyc -c /home/camilo/trunk/utils/target/dependency/lucene-core-3.0.2.jar –javac MyAnalyzer.rb并将其打包为jar.

现在,当尝试在java中使用MyAnalyzer时,MyAnalyzer是org.jruby.RubyObject的后代,而不是org.apache.lucene.analysis.Analyzer的后代.

有没有办法让Java将MyAnalyzer视为分析器而不是RubyObject?或者这是否超出了JRuby现在可以做的范围?

JRuby版本:jruby 1.6.0(ruby 1.8.7 patchlevel 330)

解决方法 根据我的理解,我猜你正在尝试创建一个扩展java类(使用脚本引擎)的JRuby类,并将该类交还给Java.

您的Ruby类可能如下所示:

require 'java'require 'lucene-core.jar'java_import 'org.apache.lucene.analysis.Analyzer'java_import 'org.apache.lucene.analysis.standard.StandardTokenizer'java_import 'org.apache.lucene.util.Version'java_import 'org.apache.lucene.analysis.TokenStream'java_import 'java.io.Reader'class MyAnalyzer < Analyzer  def tokenStream(file_name,reader)      # ...  end end

然后,您可以在Java中使用此类,如下所示:

import javax.script.ScriptEngine;import javax.script.ScriptEngineManager;import javax.script.ScriptException;import java.io.fileReader;import java.io.fileNotFoundException;import java.io.Reader;import org.apache.lucene.analysis.Analyzer;public class RunMyAnalyzer {    public static voID main(String[] args) throws ScriptException,fileNotFoundException {        String filename = "my-analyzer.rb";        ScriptEngineManager manager = new ScriptEngineManager();        ScriptEngine engine = manager.getEngineByname("jruby");        Reader reader = new fileReader(filename);        engine.eval(reader);        // Instantiate the JRuby class,and cast the result of eval.        Analyzer analyzer = (Analyzer) engine.eval("MyAnalyzer.new");        // You can then use this analyzer like a Lucene Analyzer    }}

然后编译并运行:

$javac -cp .:lucene-core.jar:$JRUBY_HOME/lib/jruby.jar RunMyAnalyzer.java $java -cp .:lucene-core.jar:$JRUBY_HOME/lib/jruby.jar RunMyAnalyzer

这里的关键是JRuby生成一个代理类,然后可以将其转换为Java超类Class.

总结

以上是内存溢出为你收集整理的是否可以从JRuby创建Java类并在Java中使用它们?全部内容,希望文章能够帮你解决是否可以从JRuby创建Java类并在Java中使用它们?所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/langs/1278098.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2022-06-09
下一篇2022-06-09

发表评论

登录后才能评论

评论列表(0条)

    保存