Java:如何干净地处理缺少外部库?

时间:2013-02-01 21:35:22

标签: java external

我正在使用我没有许可分发的商业API库。

我的应用程序的最终用户必须安装库并在类路径中才能使我的应用程序正常工作。除了jar之外,他们还必须在LD_LIBRARY_PATH中包含一些其他文件。

我更喜欢在启动时运行测试,安装先决条件并且我正在使用的对象正常工作。如果没有,请返回包含说明的用户友好消息或执行某种更正。 (比如询问用户安装库的位置并将一些变量写入启动脚本)。

我找到ClassLoader.loadClass并且我认为我应该使用它,但我找不到一个说明我的用例的例子,我不确定是否可以直接使用它

我相信如果loadClass成功,我需要实例化一个类对象并尝试使用它来确定LD_LIBRARY_PATH是否设置正确。

我很感激任何帮助。

3 个答案:

答案 0 :(得分:4)

你需要一个抛出异常的方法,你可以抓住ClassNotFoundExceptionNoClassDefFoundError

        public void testCatchException() {
            try {
                checkClassesExisting();
            } catch (ClassNotFoundException ex) {
                // TODO handle exception
            } catch (NoClassDefFoundError ex) {
                // TODO handle exception
            } catch (Exception ex) {
                // other error
            }
        }


        public void checkClassesExisting() throws Exception {
            // instantiate here the class in doubt
            Dummy = new Dummy("xx");
        }

NoClassDefFoundError

的Addidional信息

答案 1 :(得分:2)

如果您要求购买第三方图书馆以便使用您的第三方图书馆,您不应该做任何事情。让ClassNotFoundException出现在顶部。该例外将告诉您缺少哪个库。

如果你捕获了ClassNotFoundException并且你的库中有一个类的配置问题,它将被你认为这个缺少的第三方库掩盖。

答案 2 :(得分:1)

为了查找jar是否可用,我会使用Class.forName来尝试从该jar加载一个类。

如果在包装它们的类中的静态块中初始化/检查本机库,那么同样的方法也适用于它们。