我正在尝试修复此异常:无法在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缓存路径。我是对的吗?
答案 0 :(得分:2)
我会创建单独的32位和64位版本的工件。这可以通过将swt依赖项包装到配置文件中来实现(您可以将它们称为32bit
和64bit
),然后激活合适的配置文件。然后,您可以生成两个不同名称或版本(或分类器)的工件。
答案 1 :(得分:0)
我通过这样做解决了这个问题:我已经下载了32位和64位的jar并将它们放在我项目的资源文件夹中(/swt/swt_x86.jar和/swt/swt_x86_64.jar)。然后,在我需要jar的地方,我使用了主题中提到的函数来加载它基于Java架构。