首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在基于maven的项目上动态加载JAR。

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

Stack Overflow用户
提问于 2017-08-08 22:15:02
回答 2查看 168关注 0票数 2

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

我的项目是基于maven的,我在pom.xml文件中声明了这两个依赖项(SWT32位和SWT64位)。

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

代码语言:javascript
复制
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缓存的路径。我说的对吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-08-09 21:03:38

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

票数 0
EN

Stack Overflow用户

发布于 2017-08-08 22:30:10

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

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/45570766

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档