如果某个特定的 JAR 文件已经在我的类路径中,那么在运行时了解的最佳方法是什么?(如果不是这种情况,我应该在运行时添加它)。
我事先不知道 jar 的名称或其中的类。用户可以选择它。jar 代表一个运行时可插入组件(我的问题中的驱动程序)。
如果某个特定的 JAR 文件已经在我的类路径中,那么在运行时了解的最佳方法是什么?(如果不是这种情况,我应该在运行时添加它)。
我事先不知道 jar 的名称或其中的类。用户可以选择它。jar 代表一个运行时可插入组件(我的问题中的驱动程序)。
String classpath = System.getProperty("java.class.path")
这将为您提供类路径中的内容。然后,您可以将其解析为所需的 jar 文件
一种务实的方式:目标 jar 内部(并且仅在内部)的类Class.forName("com.myclass")
在哪里?com.myclass
如果抛出 a ClassNotFoundException
,则 jar 不在您当前的类路径中。
但是请记住,在运行时加载 jar并不是很简单,您需要使用类加载器。通常(有例外)不是这样,您应该能够在运行之前将 jar 显式添加到类路径中。
更新:更新后的问题表明我们事先不知道“jar 的名称或其中的类”;如果是这样,这个答案显然不适用。答案将取决于您的特定类加载器。在通常情况下,AlexAndas 的回答应该有效。
尝试使用此方法:
公共静态无效 isJarExist(String jarName) { 类加载器 classLoader = ClassLoader.getSystemClassLoader(); if (classLoader instanceof URLClassLoader) { URLClassLoader classLoader2 = (URLClassLoader) 类加载器; URL [] urls = classLoader2.getURLs(); 对于(网址网址:网址) { 文件文件=新文件(url.getFile()); if (file.getPath().endsWith(jarName)) { System.out.println(jarName + "存在"); 返回; } } System.out.println(jarName + "不存在"); } }只需像 isJarExist("myjar.jar) 一样传递您的 jar,您还可以修改它以根据需要返回布尔值
一般来说,您不能这样做,因为您的应用程序中可能存在不提供 jar 文件信息的类加载器。在 URLClassLoaders 的情况下,可以使用 Alex Adas 的解决方案