如何在不面临依赖性问题的情况下从 JAR 调用方法? Java

How do I call a method from a JAR without facing a dependency issue? Java

示例:
这将存在于 JAR 中。

public class Foo {
    public void saySomething() {
        Log.d("Status","Got it!");
    }
}

这将存在于我的 Main class。

public class Main {
    public void tryToGetSomething() {
        Foo.saySomething();
    }
}

显然,问题是如果不包含 JAR,它会抛出错误。我该如何解决这个问题?我如何才能对其进行保护性编码,以便在包含 JAR 时执行此操作,但在不包含 JAR 时执行其他操作?

另外,抱歉,如果代码没有意义,几秒钟后就写好了。你应该明白了。

如果您尝试使用不存在的 class/method,将抛出 java.lang.NoClassDefFoundError。在这种情况下,您可以捕获此错误并提供替代行为:

try {
  Foo.saySomething();
} catch (NoClassDefFoundError e) {
  System.out.println("Load the jar");
}

有趣的是,您将无法捕获同样抛出的 ClassNotFoundException,因为它是已检查的异常。可能值得查看 this post 以详细了解它们之间的区别,以确保您正在解决相应的问题。

以下用于查找 Foo class 并调用该方法的反射代码将起作用。未导入jar会出现异常,可以优雅处理。

try {
    Class clazz = Class.forName("Foo");
    Method method = clazz.getMethod("saySomething");
    Object obj = clazz.newInstance();
    method.invoke(obj);
 } catch (ClassNotFoundException | NoSuchMethodException | SecurityException | InstantiationException | IllegalAccessException | InvocationTargetException ex) {
    Logger.getLogger(Main.class.getName()).log(Level.SEVERE, null, ex);
 }