2009-03-16 6 views
1

Je souhaite séparer certaines DLL des classes JNI natives associées.DLL séparée et appel natif dans un plugin différent

Plugins:

  • dans le plugin A DLL sont placés et chargés lorsque le module est chargé.
  • Dans plug-in B (dépendent A) les classes JNI sont placés qui comprennent la méthode native appelle les DLL dans A.

Lors de l'exécution i obtenir un UnsatisfiedLinkError parce que la classe JNI ne peut pas être trouvé. J'essaie de mettre à jour la logique de classloader en mettant à jour les fichiers MANIFEST:

Plugin A:

Eclipse-BuddyPolicy: registered 

Plugin B:

Eclipse-RegisterBuddy: A 

Mais ceci est aussi ne fonctionne pas. Connaissez-vous une solution?

EDIT:

MANIFESTE 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 

MANIFESTE 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 
+0

Personne n'a une idée? –

Répondre

1

est de plug-in tournerais ma suggestion immédiate B dans un fragment pour le plugin A plutôt que d'un plugin séparé, ce qui permettrait d'éliminer les problèmes.

Cela dit, je pense que vous avez vos manifestes échangés; plug-in B qui tente d'effectuer la JNI appels doit avoir Eclipse-BuddyPolicy:registered, et le plugin A doit être en fonction de l'enregistrement et avec le plugin B.

Cela dit, après avoir lu the buddyloading docs, je ne suis pas certain que la politique de buddyloading fonctionne pour non Fichiers de classe -Java.

+0

Je vais essayer de mettre les DLL dans un fragment et essayer à nouveau. Merci. –

+0

Le fragment fonctionne. La conséquence est que je dois restructurer mes fonctionnalités de projet, mais cela devrait être le plus petit problème. –

+0

De rien. Je suis content que ça marche! –

Questions connexes