3

如果某个特定的 JAR 文件已经在我的类路径中,那么在运行时了解的最佳方法是什么?(如果不是这种情况,我应该在运行时添加它)。

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

4

4 回答 4

3
String classpath = System.getProperty("java.class.path")

这将为您提供类路径中的内容。然后,您可以将其解析为所需的 jar 文件

于 2013-05-16T11:03:49.860 回答
3

一种务实的方式:目标 jar 内部(并且仅在内部)的类Class.forName("com.myclass")在哪里?com.myclass如果抛出 a ClassNotFoundException,则 jar 不在您当前的类路径中。

但是请记住,在运行时加载 jar并不是很简单,您需要使用类加载器。通常(有例外)不是这样,您应该能够在运行之前将 jar 显式添加到类路径中。

更新:更新后的问题表明我们事先不知道“jar 的名称或其中的类”;如果是这样,这个答案显然不适用。答案将取决于您的特定类加载器。在通常情况下,AlexAndas 的回答应该有效。

于 2013-05-16T11:12:02.633 回答
1

尝试使用此方法:

公共静态无效 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,您还可以修改它以根据需要返回布尔值

于 2013-05-16T11:27:51.483 回答
1

一般来说,您不能这样做,因为您的应用程序中可能存在不提供 jar 文件信息的类加载器。在 URLClassLoaders 的情况下,可以使用 Alex Adas 的解决方案

于 2013-05-16T11:55:51.727 回答