2010-10-16 8 views
0

Salutations, J'ai un projet java que j'exporte en tant que pot. Ce projet Java utilise également JNI. Jusqu'à présent, la seule méthode que j'ai pu utiliser pour utiliser ce fichier dans un plugin Eclipse est de l'intégrer dans un autre projet de plugin eclipse, et d'ajouter ce plugin jar à des dépendances de mon plugin actuel. J'ai lutté avec les chemins et les paramètres de dépendance d'Eclipse pendant des jours, et cette méthode est la seule qui fonctionne pour moi en ce moment. Cependant, ce n'est pas très pratique, car quand je change mon code java basé JNI, je peux simplement créer un nouveau jar, mais pour connecter ce jar à mon plugin actuel, je dois recréer le plugin JAR à chaque fois. En d'autres termes, je supprime le projet plugin jar wrapper avec tout ce qui se trouve sur le disque, et je le crée de nouveau avec le même nom, en pointant vers le fichier jar mis à jour. Je dois également supprimer la référence à ce projet du projet de plugin et ajouter à nouveau (peut-être que cela a été plus intelligent récemment, mais je ne l'ai pas testé)Puis-je mettre à jour un projet de plugin Eclipse, qui est simplement un wrapper autour d'un pot?

Cela prend du temps, et je ne peux pas ajouter cette enveloppe plugin projet à svn soit, car il est créé à partir de zéro à chaque fois. Si je pouvais simplement mettre à jour un projet de plugin eclipse enveloppant jar en pointant sur la nouvelle version de jar, cela résoudrait mon problème, et je pourrais valider le projet sur svn après chaque mise à jour.

Y a-t-il une méthode que vous pouvez imaginer qui pourrait m'aider à exécuter ce processus en douceur?

Cordialement Seref

+0

il suffit de remplacer le fichier jar dedans. –

+0

Dans Eclipse, il existe un type spécifique de projet de plugin, qui extrait essentiellement un pot et l'enveloppe comme un plugin. C'est le seul moyen de faire fonctionner le code JNI, car la DLL natif est correctement extraite puis retrouvée par Eclipse Runtime. Par conséquent, chaque fois que la DLL native ou le code jni change, ce processus doit être répété. – mahonya

Répondre

1

Une méthode Equinox seule (non standard OSGi) d'utiliser des bibliothèques externes dans un bundle OSGi sans les envelopper physiquement est LIASSES par référence: vous avez encore besoin d'un plugin wrapper, mais ne contient pas la bibliothèque enveloppée elle-même, mais une référence dans l'en-tête de manifeste du faisceau Bundle-Classpath avec une syntaxe comme ceci:

Bundle-Classpath: external:/path/to/your/lib.jar 

Pendant le temps de développement, ce qui est très pratique et évite d'avoir à recréer le plugin wrapper chaque fois que le la bibliothèque enveloppée est mise à jour. Au cours du déploiement, vous devrez soit installer la bibliothèque avec le produit, soit utiliser un plugin wrapper traditionnel (contenant la bibliothèque actuelle). Vous pouvez également utiliser le même plugin wrapper pour les cas d'utilisation, mais modifiez le Bundle-Classpath de external:/stuff/lib.jar en libs/lib.jar selon que vous souhaitez utiliser la bibliothèque enveloppée ou externe.

(La plupart viennent du livre OSGi et Equinox - Création d'une grande modularité Java Systems, que je ne aime pas vraiment, mais qui contient néanmoins des choses utiles sur Equinox (la mise en œuvre de OSGi Eclipse) et le système de construction PDE Pourquoi devez-vous recréer le projet wrapper chaque fois?

+0

Si cela fonctionne avec JNI (ce qui est un cauchemar en termes de chemins, etc), ce serait une bonne solution pour le temps de développement. Puisque je n'ai pas le livre, puis-je demander si la valeur bundle-classpath peut être utilisée pour faire référence à des chemins relatifs dans eclipse? external: ... nécessite un chemin out of eclipse à configurer. – mahonya

+0

Cela fonctionne avec les variables d'environnement, donc pendant le développement, vous pouvez définir une variable d'environnement pointant vers votre espace de travail (appelons $ EXTERNAL_DEPS) et utiliser external: $ EXTERNAL_DEPS /some_project/libs/lib.jar dans la classe Bundle-Classpath.D'un autre côté, si vous avez besoin d'extraire des bibliothèques natives ou de déployer l'ensemble en tant que répertoire au lieu d'un fichier JAR, je ne suis pas sûr de ce que vous en retirerez. Je ne sais pas si Bundle-NativeCode autorise le contenu externe possible avec Bundle-Classpath. – pmf

Questions connexes