52 votes

Quand devrais-je utiliser Import-Package et quand devrais-je utiliser Require-Bundle?

OSGi permet de déterminer les dépendances via Import-Package, qui connecte un seul package (exporté à partir de n'importe quel bundle), et Require-Bundle, qui connecte les exportations d'un bundle nommé spécifique.

Lors de la création d’une application Greenfield OSGi, quelle approche dois-je utiliser pour représenter les dépendances? La plupart des bundles seront internes, mais il y aura certaines dépendances sur des bundles externes (open-source).

50voto

Thilo Points 108673

Je crois require-Bundle est une Éclipse chose (qui a maintenant fait dans le OSGi spec pour accueillir Eclipse). La "pure" OSGi façon est d'utiliser Import-Package, comme il se dissocie expressément le package à partir du bundle qui le fournit. Vous devriez être de déclarer les dépendances sur les fonctionnalités dont vous avez besoin (Java API fournie par une certaine version d'un paquet), au lieu d'où cette fonctionnalité est à venir à partir de (ce qui ne devrait pas question pour vous). Cela permet de maintenir la composition d'ensembles plus souple.

JavaScript analogie: C'est comme pour détecter si un navigateur web prend en charge un certain API rapport à déduire de ce que la chaîne de l'agent utilisateur indique quel type de navigateur, il est.

Peter Kriens de l'OSGi Alliance a plus à dire à ce sujet sur le OSGi blog.

Probablement le seul cas où vous avez besoin d'utiliser require-Bundle est si vous avez divisé les paquets, c'est un package qui est réparti sur plusieurs faisceaux. Diviser les paquets sont bien sûr fortement déconseillés.

14voto

tukushan Points 2574

Faveur de l'Import-Package plus require-Bundle.

Require-Bundle:

  • spécifie explicitement le bundle (et version) à utiliser. Si un requirde bundle doit être remaniée et un paquet déplacé ailleurs, alors les personnes à charge aura besoin de changements dans leur MANIFESTE.MF
  • vous donne accès à TOUS les exportations de l'ensemble, peu importe ce qu'ils sont, et indépendamment du fait que vous en avez besoin. Si les pièces que vous n'avez pas besoin d'avoir leurs propres dépendances vous aurez besoin de ces pour
  • les lots peuvent être réexportés
  • bien que découragé, permet l'utilisation de split paquets, c'est à dire: un package qui est réparti sur plusieurs faisceaux
  • peut être utilisé à des fins non-code dépendances, par exemple: ressources, de l'Aide etc.

Import-Package:

  • un couplage lâche, seulement le paquet (et version) est spécifié et que le moment de l'exécution trouve le nécessaire bundle
  • Implémentations réelles peuvent être swaped out
  • Les paquets dépendants peut être déplacé dans différentes grappes par le propriétaire de paquet
  • Mais requiert plus de métadonnées pour être maintenu (j'.e: chaque nom de paquet) à des niveaux de granularité

5voto

omerkudat Points 2536

Je pense qu'Import-Package vous donne un couplage plus souple et devrait être préféré. Je l'utilise lorsque je déclare des dépendances sur des paquets que je ne possède pas, tels que slf4j, et je peux permuter les implémentations à ma guise. J'utilise Require-Bundle lorsque la dépendance est quelque chose que je contrôle, comme mes propres bundles, car tout changement important serait passé par moi de toute façon.

0voto

Francis Upton Points 13363

Je pense que vous devriez utiliser Import-Package si vous n'avez pas de préoccupations au sujet de la gestion des versions, que ce sera de trouver le bon bundle (et c'est théoriquement plus facile) Cependant, si vous souhaitez contrôler la gestion des versions, alors vous devriez utiliser require-Bundle. Ma préférence est require-Bundle, il donne un bon contrôle, et je n'aime pas à propos de la fonctionnalité d'avoir OSGi comprendre à quel paquet se trouve dans la liasse. Il est aussi question d'un paquet qui peut être décomposé en plusieurs faisceaux. Je ne sais pas comment cette affaire est traitée avec de l'Import-Package. Il fonctionne bien évidemment avec require-Bundle.

0voto

kberg Points 106

Je ne suis pas convaincu qu'il soit préférable d'utiliser Import-Package, car mon attente par défaut lorsque je travaille avec un bundle est de travailler avec l'API publique associée. Pour cette raison, Require-Bundle est plus logique.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X