jar ファイルへの絶対パスとクラス名を指定して、Java クラスを動的にインスタンス化しようとしています。具体的には、インスタンス化しようとしているこの Java クラス:
public Tool(String[] args) {
this.args = args;
errMgr = new ErrorManager(this);
errMgr.setFormat(msgFormat);
handleArgs();
}
私は次のことを試しています:
require 'java';
java_import 'java.io.File';
java_import 'java.net.URL';
java_import 'java.net.URLClassLoader';
class JarLoader
def self.load_class(p_jar_path, p_class_name, p_args)
# p_jar_path: absolute path to jat
l_jar_url = File.new(p_jar_path).toURL;
l_url_arr = Array[l_jar_url].to_java(java.net.URL);
l_class_loader = JavaNet::URLClassLoader.new(l_url_arr);
# p_class_name: name of the class
l_class_type = l_class_loader.loadClass(p_class_name);
# Get the right constructor
l_constructor = l_class_type.getConstructor(Array(String).to_java.class);
return l_constructor.newInstance(p_args.to_java(:string));
end
end
エラーが発生します
Java::JavaLang::NoSuchMethodException: org.antlr.v4.Tool.<init>([Ljava.lang.Object;)
どういうわけか、コンストラクターへのパラメーターが間違った型になってしまいます。私はJava jdk 1.5(Oracle 11g dbで作業する必要があるため)とjruby 1.7.1を使用しています。
私はこれで頭がいっぱいです。ご協力ありがとうございました。