在基于maven的项目上动态加载JAR

时间:2017-08-08 14:15:02

标签: java maven jar swt

我正在尝试修复此异常:无法在32位JVM上加载64位SWT库

我的项目基于maven,我在pom.xml文件中声明了两个依赖项(SWT 32位和SWT 64位)。

我正在尝试使用以下函数基于Java体系结构数据模型(sun.arch.data.model属性)动态加载正确的JAR:

private static synchronized void loadLibrary(File jar) {
    try {
        URLClassLoader loader = (URLClassLoader) ClassLoader.getSystemClassLoader();
        URL url = jar.toURI().toURL();

        for (URL it : Arrays.asList(loader.getURLs())) {
            if (it.equals(url)) {
                return;
            }
        }

        Method method = URLClassLoader.class.getDeclaredMethod("addURL", new Class[]{URL.class});
        method.setAccessible(true);
        method.invoke(loader, new Object[]{url});
    } catch (Exception e) {
        System.out.println("error");
    }
}

问题是我不知道如何指定JAR的路径。我看到JAR是在.m2文件夹中下载的,但我想我无法指定该路径。我的猜测是我应该指定JNLP将下载JAR的Java缓存路径。我是对的吗?

2 个答案:

答案 0 :(得分:2)

我会创建单独的32位和64位版本的工件。这可以通过将swt依赖项包装到配置文件中来实现(您可以将它们称为32bit64bit),然后激活合适的配置文件。然后,您可以生成两个不同名称或版本(或分类器)的工件。

答案 1 :(得分:0)

我通过这样做解决了这个问题:我已经下载了32位和64位的jar并将它们放在我项目的资源文件夹中(/swt/swt_x86.jar和/swt/swt_x86_64.jar)。然后,在我需要jar的地方,我使用了主题中提到的函数来加载它基于Java架构。