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