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
Foi útil?

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.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top