2017-08-08 48 views
2

我試圖解決這一異常的JAR:無法加載32位的64位SWT庫JVM動態加載在一個Maven基於項目

我的項目是基於Maven和我宣佈這兩個依賴(SWT 32位和SWT 64位)在pom.xml文件中。

我試圖動態加載基於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

你在用什麼IDE? –

+0

我正在使用Netbeans –

回答

1

我會爲您的工件創建單獨的32位和64位版本。這可以通過將swt依賴包裝到配置文件中來實現(您可以稱它們爲32bit64bit),然後激活合適的配置文件。然後,您可以生成兩個不同名稱或版本(或分類器)的工件。

+0

你好。謝謝您的回答。我實際上正在尋找一種更快,更簡單的方法來做到這一點。上下文是我使用JWebBrowser在我的應用程序中顯示一些Youtube視頻,這是應用程序中存在體系結構差異的唯一位置,我認爲通過加載相應的JAR我可以快速解決此問題並將其部署到用戶。我知道這是一個黑客,但我想快速完成。 P.S.很好的答案,謝謝。 –

0

我解決了這個問題:我已經下載了32位和64位的jar,並將它們放在我的項目的資源文件夾中(/swt/swt_x86.jar和/swt/swt_x86_64.jar)。然後,在我需要jar的地方,我使用上述函數根據Java架構加載它。它工作,我知道這是一個黑客,但我想快速部署它。

P.S.當我部署它時,我排除了混淆的瓶子。