من یک فایل jar دانلود کردم و باید ابتدا این فایل jar را در برنامه Load کنم و بعد از آن یکی از فایل هایش با پسوند .class را لود کنم.برای لود کلاس طبق لینک زیر مشکلم حل می شود:(البته من کد زیر را در حالتی تست کردم که فایل jar را قبلا به صورت دستی به برنامه اضافه کرده بودم ،نه از راه کدنویسی)
چطور در جاوا می توان فایل با پسوند class را در زمان runtime در برنامه بارگذاری کرد؟
الان چند تا مشکل دارم:
1-من این فایل jar را که دانلود کردم ،نمی دونم داخل هر فایل class. اش چه متدهایی وجود داره،که بخوام اونارو فراخوانی کنم.
با توجه به این مورد،به چه شکل می تونم متدهایی را که نمیدونم چی هستند را فراخونی کنم؟(در واقع آیا راهی هست که اطلاعاتی درباره ی این کلاس و متدهاش داشته باشم؟)
2-من کدزیر را پیدا کردم ولی فایل jar را پیدا میکنه ولی موقع لود کلاساش،خطا می دهد که "Source not found".این پیغام را موقع debug می دهد ،آخرشم این خطا را میدهد:
Exception in thread "main" java.lang.NoClassDefFoundError: antlr/CommonAST
at java.lang.ClassLoader.defineClass1(Native Method)
at java.lang.ClassLoader.defineClass(Unknown Source)
at java.security.SecureClassLoader.defineClass(Unknown Source)
at java.net.URLClassLoader.defineClass(Unknown Source)
at java.net.URLClassLoader.access$100(Unknown Source)
at java.net.URLClassLoader$1.run(Unknown Source)
at java.net.URLClassLoader$1.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
at java.net.FactoryURLClassLoader.loadClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
at fileFolder.Actions.DynamicClassLOading(Actions.java:94)
at fileFolder.Exec.main(Exec.java:35)
Caused by: java.lang.ClassNotFoundException: antlr.CommonAST
at java.net.URLClassLoader$1.run(Unknown Source)
at java.net.URLClassLoader$1.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
... 16 more
اینم کد من:
public void DynamicClassLOading() throws IOException,
ClassNotFoundException {
String pathToJar = "E:\\hibernate-core-4.1.0.Final.jar";
JarFile jarFile = new JarFile(pathToJar);
Enumeration e = jarFile.entries();
URL[] urls = { new URL("jar:file:" + pathToJar + "!/") };
URLClassLoader cl = URLClassLoader.newInstance(urls);
while (e.hasMoreElements()) {
JarEntry je = (JarEntry) e.nextElement();
if (je.isDirectory() || !je.getName().endsWith(".class")) {
continue;
}
// -6 because of .class
String className = je.getName().substring(0,
je.getName().length() - 6);
className = className.replace('/', '.');
Class c = cl.loadClass(className);
}
}