我想使用Java Reflection通过jar文件中的URLClassLoader从我的类路径中的类调用方法。
我想从Jar文件中访问的类:
package org.example;
public final class Sample {
private Sample() {} //disallow outside instantiation
public static void initialize(String a) {
Sample.initialize(a, "some string", "some other string")
}
public static void initialize(String a, String b, String c) {
//some logic...
}
// ...
}
以下是我尝试从顶级Main类访问上述类的方法。一个名为Test的课程:
public static void main(String[] args) throws Exception {
final URLClassLoader v1Loader = URLClassLoader.newInstance( new URL[] { new File("./jar/sample.jar").toURI().toURL()} );
final Class<?> engineClassV1 = v1Loader.loadClass("org.example.Sample");
Method initMethod1 = engineClassV1.getMethod("initialize", String.class);.........(25)
}
我在第25行得到例外:
Exception in thread "main" java.lang.NoClassDefFoundError: org/example/services/common/exception/ServiceException
at java.lang.Class.getDeclaredMethods0(Native Method)
at java.lang.Class.privateGetDeclaredMethods(Class.java:2701)
at java.lang.Class.privateGetMethodRecursive(Class.java:3048)
at java.lang.Class.getMethod0(Class.java:3018)
at java.lang.Class.getMethod(Class.java:1784)
at org.sample.Test.main(Test.java:25)
我做错了什么?如何使用单个String参数访问重载的静态初始化方法?