我认为不可能做你想做的事。如果您有三个类都称为“src.tool.Tools”,Java 并不关心您从哪个 jar 文件中加载它们。如果所有三个项目(我假设这意味着 jar 文件)都具有相同的类,Java 将发生冲突,您无法预测它将加载哪些工具。
确保调用正确的唯一方法是确保其他两个不在类路径中。
您的问题有一个黑客解决方案。您可以为每个项目创建一个新的 ClassLoader,并要求 ClassLoader 为 Tools 类提供所需的项目。然后使用反射,您可以实例化它并调用该方法。由于每个项目都在其自己的 ClassLoader 中,因此三个 Tools 类将不再冲突。
前任:
URLClassLoader a = new URLClassLoader(aJar.toURL(), getClass().getClassLoader());
Class toolsClass = Class.forName("src.tool.Tools", true, a);
Method m = toolsClass.getDeclaredMethod("tool");
Object i = toolsClass.newInstance();
Object result = m.invoke(instance);
(从How should I load Jars dynamic at runtime? 中提取的 URLClassLoader 示例?)