Domanda

Voglio separare alcune DLL dalle classi JNI native associate.

Plugin:

  • Nel plugin A vengono inserite le dll e caricato quando viene caricato il plug-in.
  • In plugin B (dipende da A) il JNI vengono posizionate le classi che includono il il metodo nativo richiede le DLL in A.

In fase di esecuzione ottengo un UnsatisfiedLinkError perché non è possibile trovare la classe JNI. Provo ad aggiornare la logica del classloader aggiornando i file MANIFEST:

Plugin A:

Eclipse-BuddyPolicy: registered

Plugin B:

Eclipse-RegisterBuddy: A

Ma anche questo non funziona. Conosci una soluzione?

EDIT:

MANIFEST A:

Manifest-Version: 1.0
Bundle-ManifestVersion: 2
Bundle-Name: %plugin.name
Bundle-SymbolicName: xxx ;singleton:=true
Bundle-Version: 1.0.0
Bundle-Activator: xxx.Plugin
Bundle-Vendor: xxx
Bundle-Localization: plugin
Bundle-NativeCode: native/dll/x1.dll;
 native/dll/x2.dll;
 native/dll/x3.dll;
 native/dll/x4.dll;
 native/dll/x5.dll;
 native/dll/x76.dll;
 native/dll/x.dll;
 native/dll/x7.dll;osname = win32; processor = x86
Require-Bundle: org.eclipse.core.runtime,
 org.eclipse.ui,
 org.apache.commons.logging
Bundle-ClassPath: .
Eclipse-AutoStart: true
Eclipse-LazyStart: true
Bundle-ActivationPolicy: lazy
Eclipse-BuddyPolicy: registered
Export-Package: xxx

MANIFEST B:

Manifest-Version: 1.0
Bundle-ManifestVersion: 2
Bundle-Name: %plugin.name
Bundle-SymbolicName: xxx;singleton:=true
Bundle-Version: 2.1.16
Bundle-Vendor: xxx
Bundle-Localization: plugin
Require-Bundle: org.eclipse.core.runtime,
 org.eclipse.ui,
 org.apache.commons.lang,
 org.apache.commons.logging,
 A
Export-Package: xxx
Bundle-ClassPath: .
Bundle-Activator: xxx
Eclipse-RegisterBuddy: A
Eclipse-AutoStart: true
Eclipse-LazyStart: true
Bundle-ActivationPolicy: lazy
È stato utile?

Soluzione

Il mio suggerimento immediato è di trasformare il plug-in B in un frammento per il plug-in A anziché in un plug-in separato, che eliminerebbe i problemi.

Detto questo, penso che tu abbia cambiato i tuoi manifest; il plugin B che sta tentando di eseguire le chiamate JNI dovrebbe avere Eclipse-BuddyPolicy: registrato e il plugin A dovrebbe dipendere e registrarsi con il plugin B.

Detto questo, dopo aver letto i documenti di buddyloading , non sono sicuro che la politica di buddyloading funziona per file di classe non Java.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top