jarファイルからクラスを読み込もうとしています。基本的には、そのjarファイルのパッケージ内の特定のクラスのメソッドを呼び出す必要があります。私がここで直面している問題は、クラスが正常にjarからロードされた後、インスタンス化しようとすると例外が発生するということです。クラスにインポートされたクラスのClassNotFoundです。ここJavaでリフレクションを使用して読み込んだクラスの読み込みクラスの読み込み
は、クラスをロードするクラスである:
入力:D:\ Myjar.jar、com.vendor.epbroker.VNFLCMCommunicator
public Class<?> loadClass(String libPath, String pkgName) {
LogManager.getLogger().info("Adding Class");
File jarFile = null;
try {
jarFile = new File(libPath);
URL fileURL = jarFile.toURI().toURL();
String jarURL = "jar:" + fileURL + "!/";
URL urls[] = { new URL(jarURL) };
URLClassLoader ucl = new URLClassLoader(urls);
Class<?> beanClass = ucl.loadClass(pkgName);
ucl.close();
return beanClass;
} catch (Exception ex) {
LogManager.getLogger().error("Given Library: " + libPath + " or Class name: " + pkgName + " is not Valid");
LogManager.getLogger().error("Exception occurred : ", ex);
}
LogManager.getLogger().error("Class loading Error: Returning NULL");
return null;
}
このクラスを受け取るコードスニペット:
Object instance = classToLoad.newInstance();
// To get the list of methods exist in the Class
Method[] listOfMethods = classToLoad.getMethods();
次のエラーが発生します。
SEVERE: Servlet.service() for servlet [spring] in context with path [/vnflcm] threw exception [Handler processing failed; nested exception is java.lang.NoClassDefFoundError: com/vendor/epbroker/exception/EPBrokerException] with root cause
java.lang.ClassNotFoundException: com.vendor.epbroker.exception.EPBrokerException
at java.net.URLClassLoader.findClass(URLClassLoader.java:381)
at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
at java.lang.Class.getDeclaredConstructors0(Native Method)
at java.lang.Class.privateGetDeclaredConstructors(Class.java:2671)
at java.lang.Class.getConstructor0(Class.java:3075)
何か助けていただければ幸いですか?
'String jarURL = ...'行を削除してください。 URLは「jar:」URLであってはなりません。ただ 'URL urls [] = {fileURL};'を実行してください。 – VGR
@VGRこれも役に立たなかった。これを実行しても同じエラーが発生しました。また、エラーはcom.google.gson.Gsonと他のパッケージのクラスでも発生していました。これを解決する方法がわかりません。 –
com.google.gson.Gsonを読み込もうとしたときにエラーが発生しましたが、com.vendor.epbroker.exception.EPBrokerExceptionが見つからないという例外があります。あなたの.jarファイルにEPBrokerException.classがありますか? – VGR