2

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

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

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

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

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

我会很感激任何帮助。

4

3 回答 3

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的附加信息

于 2013-02-01T21:39:42.953 回答
2

如果您需要购买 3rd 方库才能使用您的库,那么您真的不应该做任何事情。让 ClassNotFoundException 出现在顶部。异常会告诉您缺少哪个库。

如果您确实捕获了 ClassNotFoundException 并且您的库中的某个类存在配置问题,那么它会被您认为缺少的第 3 方库所掩盖。

于 2013-02-02T06:19:12.960 回答
1

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

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

于 2013-02-01T21:39:02.347 回答