如何在运行时知道JAR文件是否已存在于类路径中?

时间:2013-05-16 11:02:55

标签: java classpath classloader noclassdeffounderror

在运行时知道特定JAR文件是否已存在于类路径中的最佳方法是什么? (如果不是这种情况,我应该在运行时添加它。)

我事先并不知道jar的名称,也不知道其中的类。用户可以选择它。 jar代表一个运行时可插件组件(我的问题中的驱动程序)。

4 个答案:

答案 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的解决方案