如何在Java中使用反射调用静态重载方法

如何在Java中使用反射调用静态重载方法,java,debugging,reflection,classloader,urlclassloader,Java,Debugging,Reflection,Classloader,Urlclassloader,我想使用Java反射从一个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

我想使用Java反射从一个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...
    }

    // ...
}
下面是我如何尝试从中的顶级主类访问上面的类。一个名为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)
}

我做错了什么?如何使用单个字符串参数访问重载的静态初始化方法

您确定sample.jar和主类都在同一个目录中吗?如果不是,请使用绝对路径作为参数。它们不是,但我编辑了我的问题以反映这一点。sample.jar与src文件夹和pom.xml文件一起位于项目根目录中一个名为jar的文件夹中。错误在于它无法找到
org/example/services/common/exception/serviceeexception
,因此问题不在于您使用
getMethod
的方式。
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)