DLL separada e chamada nativa em plug-in diferente
-
19-08-2019 - |
Pergunta
Eu quero separar algumas DLLs das classes JNI nativas associadas.
Plugins:
- No plug-in Uma das DLLs são colocados e carregado quando o plug-in é carregado.
- Em plug-in B (dependem A) a JNI classes são colocados que incluem o chamadas nativas método para a DLLs em A.
Em tempo de execução eu recebo uma UnsatisfiedLinkError porque a classe JNI não pode ser encontrado. Eu tento atualizar a lógica carregador de classe, atualizando os arquivos de MANIFESTO:
Plugin A:
Eclipse-BuddyPolicy: registered
Plugin B:
Eclipse-RegisterBuddy: A
Mas isso também não é trabalhar. Você sabe uma solução?
EDIT:
MANIFESTO 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
MANIFESTO 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
Solução
A minha sugestão imediata é transformar o plugin B em um fragmento para Plugin Uma vez de um plug-in separado, o que eliminaria os problemas.
Dito isso, eu acho que você tem seus manifestos comutada; Plugin B que está tentando executar as chamadas JNI deve ter Eclipse-BuddyPolicy:registered
, e encaixe A deve ser de acordo com e registrar com o plugin B.
Dito isto, depois de ler os docs buddyloading , não estou certo de que a política buddyloading funciona para arquivos de classe não-Java.