Je viens de publier une petite bibliothèque Java qui ne propose que quelques classes et méthodes. Depuis que j'ai construit le projet avec Maven, j'ai immédiatement utilisé plusieurs bibliothèques tierces pour atteindre mes objectifs, notamment:
- commons-lang3 (pour certaines choses Java générales)
- slf4j-api (pour la journalisation)
- commons-io (pour un tout petit peu de trucs sur les fichiers - lire un fichier littéralement une fois, je pense)
Je ne veux pas que ma bibliothèque apparaisse gonflée aux yeux des autres. Dois-je essayer de supprimer ma dépendance à ces bibliothèques pour minimiser mon empreinte? Des conseils sur les types de bibliothèques qu'il serait préférable d'éviter lorsque vous envisagez d'en utiliser davantage à l'avenir?
Réponses:
Je réponds à cela compte tenu de votre situation particulière. Je dirais que c'est bien d'utiliser ces bibliothèques. Assurez-vous simplement que votre slf4j-api n'apporte pas l'implémentation avec. J'entends par là marquer la dépendance d'implémentation comme "test". PAR EXEMPLE:
Ceci est décrit en détail dans la FAQ SLF4j.
Quant aux deux autres, IME, ils sont toujours rétrocompatibles. Par conséquent, si dans 5 ans, j'ai besoin d'utiliser votre bibliothèque mais que vous en utilisez une ancienne version, je peux simplement exclure vos dépendances et notre code fonctionnera toujours. En d'autres termes, en utilisant ces bibliothèques spécifiques, vous n'introduirez pas jar-hell pour les autres.
Si j'utilise votre bibliothèque via maven, je ne remarquerai pas si votre bibliothèque est gonflée ou non. Je vais juste dépendre du vôtre et l'utiliser. Je pense qu'il est plus important que votre code fonctionne correctement que son encombrement est plus petit. Je préfère que vous utilisiez commons-io au lieu de réinventer la roue avec un bug.
la source
slf4j-api
et aucun autre artefact connexe, fourni ou non. Voir slf4j.org/manual.html#projectDep .exclude
s iirc) que j'ai dû faire quand des modules particuliers dans mes dépendances ne pouvaient pas "s'accorder" sur une version slf4j. D'après votre réponse, il semble que si les concepteurs de modules l'exposeraientprovided
, il n'y aurait pas de problèmes comme celui-ci, n'est-ce pas?provided
- très discret.mvn dependency:analyze
apportait des versions de merde jusqu'à leur exclusion :)Non.
"Ballonnement" est un mythe. Peu importe la quantité de code dans votre bibliothèque, si une partie de ce code n'est jamais utilisé, il ne sera pas paginé - il n'aura aucun impact sur les performances ou l'empreinte mémoire.
D'un autre côté, si vous avez besoin de cette fonctionnalité supplémentaire, vous avez deux choix. Vous pouvez soit l'écrire vous-même et consacrer beaucoup de temps et d'efforts à résoudre des problèmes que d'autres ont déjà résolus auparavant, ou vous pouvez choisir d'utiliser la solution qui existe déjà (et qui a été testée / déboguée / etc.).
Cela nous laisse avec la taille du téléchargement et l'empreinte de l'espace disque, et à moins que vous ne parliez de chiffres stupides, en 2013, ce sont deux facteurs qui devraient être proches du bas de la liste des choses dont vous devez vous inquiéter.
la source