
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中使用它们?所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)