Tout d'abord, le Lierre n'est pas Maven ;)
Maven2 est un logiciel de gestion de projet et de la compréhension de l'outil, tandis que le Lierre n'est qu'une dépendance de l'outil de gestion.
Ivy s'appuie fortement sur un concept unique appelé configuration.
De lierre, un module de configuration est un moyen d'utiliser ou de consulter le module.
Par exemple, vous pouvez avoir un test et de configuration d'exécution dans votre module. Mais vous pouvez aussi avoir une base de données mysql et oracle configuration. Ou une mise en veille prolongée et une configuration jdbc.
Dans chaque configuration, vous pouvez déclarer:
- ce artefacts (jar, war, ...) sont nécessaires.
- vos dépendances sur d'autres modules, et de décrire la configuration de la dépendance dont vous avez besoin. Cela s'appelle de la configuration de mappage.
Donc la conf attribut n'est précisément que: Décrit une configuration de mappage pour une dépendance.
Le mappé élément enfant est votre "côté droit de l' ->
symbole" et représente le nom de la dépendance de la configuration mappé. '*'
générique peut être utilisé pour désigner toutes les configurations de ce module.
Maven2 de son côté a quelque chose qui s'appelle la portée.
Vous pouvez déclarer une dépendance comme faisant partie de l'essai de portée, ou la compilation de la portée.
Ensuite, en fonction de ce champ d'application, vous obtiendrez la dépendance de l'artefact (un seul artefact par module dans maven2) avec ses dépendances en fonction de leur champ d'application. Les étendues sont prédéfinis dans maven2 et vous ne pouvez pas changer cela.
Cela signifie que :
Il y a beaucoup de dépendances inutiles téléchargé pour de nombreuses bibliothèques.
Par exemple, Hibernate télécharge un tas de JBoss Pots et l'Affichage de la Balise de téléchargements de tous les différents framework web Pots. J'ai trouvé moi-même à l'exclusion de presque autant de dépendances que j'ai ajouté.
Le problème est que hibernate peut être utilisé avec plusieurs implémentations de cache, plusieurs pool de connexion de la mise en œuvre, ... Et cela ne peut pas être géré avec des étendues, wheres Ivy configurations propose une solution élégante à ce genre de problème.
Par exemple, dans le lierre, le en supposant que hibernate a un lierre fichier comme celui-ci, vous pouvez déclarer une dépendance comme ça:
<dependency org="hibernate" name="hibernate" rev="2.1.8" conf="default->proxool,oscache"/>
pour obtenir hibernate avec ses proxool et oscache de mise en œuvre, comme ça:
<dependency org="hibernate" name="hibernate" rev="2.1.8" conf="default->dbcp,swarmcache"/>
pour obtenir hibernate avec dbcp et swarmcache.
Par mappage par défaut master
configuration "proxool,oscache
" ou "dbcp,swarmcache
", vous indique ce que vous devez exactement à partir du module "veille prolongée".
Vous pouvez trouver ces "proxool,..." arguments par l'inscription de la ivy configuration définie pour chaque module associé avec la bibliothèque. Par exemple:
<ivy-module version="2.0">
<info organisation="ssn-src" module="pc"/>
<configurations defaultconfmapping="default->default">
<conf name="default" />
<conf name="provided" description="they are provided by the env." />
<conf name="compile" extends="default,provided" />
<conf name="war" extends="default"/>
</configurations>
<dependencies>
Exemple:
supposons modA
a deux configurations par défaut et de test.
En pratique, ça va être très inhabituel à vouloir quitter l' conf
de l'attribut de l'élément de dépendance.
L' ivy.xml
pour modA
peuvent avoir une dépendance:
<dependency org="theteam" name="modB" rev="1.0" conf="default->*" />
Vous êtes à partir de défaut, plutôt que de les deux par défaut et de test.
L'exemple ci-dessus fait modA par défaut dépendent de la modB de conf1, conf2, et conf3.
Ou vous voudrez peut-être dire que modA par défaut dépend seulement de modB de conf1:
<dependency org="theteam" name="modB" rev="1.0" conf="default->*conf1*" />