69 votes

Quelqu'un peut-il expliquer l'attribut conf de la dépendance ivy.xml?

Je ne trouve aucune explication approfondie de la Ivy dépendance de la balise conf attribut:

<dependency org="hibernate" name="hibernate" rev="3.1.3" conf="runtime, standalone -> runtime(*)"/>

Voir qui conf attribut? Je ne peux pas trouver la moindre explication (que je peux comprendre) sur le côté droit de l' -> symbole. VEUILLEZ garder à l'esprit, je ne sais pas la première chose à propos de Maven oui, veuillez l'expliquer cet attribut avec cette contrepartie.

Oui, je l'ai déjà regardé ce: http://ant.apache.org/ivy/history/latest-milestone/ivyfile/dependency.html

Merci,
Dan

81voto

VonC Points 414372

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*" />

20voto

chubbsondubs Points 16075

J'ai lu ces réponses, et franchement, je ne trouve pas très utile. Je pense qu'ils pourraient être améliorées si j'ai écrit ce que j'ai à utiliser et à comprendre les configurations en montrant un exemple pratique:

http://wrongnotes.blogspot.com/2014/02/simplest-explanation-of-ivy.html

Malheureusement, vous avez à comprendre un peu sur maven et de ses dépendances, car la puce est à l'aide de Maven dépôts de tirer vers le bas ces fichiers jar donc le Lierre a comprendre Maven et il passe que buck pour vous. Mais, je pense que je l'ai gardé très simple, sans trop entrer dans les détails à propos de maven.

14voto

Espen Points 5898

Grâce VonC!

Il m'a beaucoup aidé plus loin.

Quand il s'agit d'options (configurations) tieTYT, vous pouvez les trouver dans le lierre-[numéro de révision].fichier xml dans votre Lierre référentiel: nom de l'organisation --> nom du module.

Un exemple de configurations élément de JUnit 4.6 révision téléchargé à partir de http://www.springsource.com/repository/app/.

<configurations>
	<conf name="compile" visibility="public" description="Compile dependencies"/>
	<conf name="optional" visibility="public" extends="compile" description="Optional dependencies"/>
	<conf name="provided" visibility="public" description="Provided dependencies"/>
	<conf name="runtime" visibility="public" extends="compile" description="Runtime dependencies"/>
</configurations>

Dans mon projet ivy.xml fichier, j'ai une configuration de compilation-test. Dans les dépendances de l'élément que j'ai la dépendance suivant:

<dependency org="org.junit" name="com.springsource.org.junit"
		rev="4.6.0" conf="compile-test->compile" />

Comme vous pouvez le voir, ma compilation-test de la configuration dépend de la compilation de configuration dans la JUnit est ivy.xml fichier.

9voto

Archie Points 2742

Cela m'a aidé une fois à comprendre les choses de cette façon:

  1. Une configuration de lierre est simplement un nom pour un sous-ensemble des artefacts du module.
  2. Les dépendances entre les modules sont spécifiées en termes de noms de configuration.

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