在运行时知道特定JAR文件是否已存在于类路径中的最佳方法是什么? (如果不是这种情况,我应该在运行时添加它。)
我事先并不知道jar的名称,也不知道其中的类。用户可以选择它。 jar代表一个运行时可插件组件(我的问题中的驱动程序)。
答案 0 :(得分:3)
务实的方式:Class.forName("com.myclass")
其中com.myclass
是一个在你的目标jar里面(并且只在里面)的类;如果它抛出ClassNotFoundException
,则jar不在你当前的类路径上。
但请记住,loading a jar at runtime不是很简单,你需要搞乱类加载器。 通常(有例外)不是那样,你应该能够在运行之前将jar显式添加到类路径中。
更新:更新的问题表明我们事先并不知道“罐子的名称或其中的类别”;如果是这样,这个答案显然不适用。答案取决于您的特定类加载器。在通常情况下,AlexAndas的回答应该有效。
答案 1 :(得分:2)
String classpath = System.getProperty("java.class.path")
这将为您提供类路径中的内容。然后,您可以解析所需的jar文件
答案 2 :(得分:1)
尝试使用此方法:
public static void isJarExist(String jarName) { ClassLoader classLoader = ClassLoader.getSystemClassLoader(); if (classLoader instanceof URLClassLoader) { URLClassLoader classLoader2 = (URLClassLoader) classLoader; URL [] urls = classLoader2.getURLs(); for (URL url : urls) { File file = new File(url.getFile()); if (file.getPath().endsWith(jarName)) { System.out.println(jarName + " exist"); return; } } System.out.println(jarName + " not exist"); } }只需像isJarExist(“myjar.jar”)一样传递你的jar,你也可以修改它以按照你的意愿返回布尔值
答案 3 :(得分:1)
您通常不能这样做,因为您的应用程序中可能存在不提供jar文件信息的类加载器。 对于URLClassLoaders,您可以使用Alex Adas的解决方案