2009-11-19 4 views
6

J'ai un ivy.xml assez grand contenant un certain nombre de configurations qui sont les mêmes pour un certain nombre de projets.Comment inclure un fichier dans ivy.xml?

Je voudrais sortir cette grande section répétitive dans un fichier d'inclusion commun. D'une manière ou d'une autre, je ne trouve aucune documentation décrivant que cela peut être fait.

Quelqu'un qui a une idée si c'est faisable?

EDIT: Après quelques réflexions supplémentaires, je pense que ce n'est pas faisable à dessein. Un fichier Ivy est censé être une unité cohérente et ne doit contenir aucune référence basée sur des fichiers, seulement des références à d'autres modules ivy ...

Répondre

9

Vous pouvez créer un méta-module de lierre, qui dépend sur tous ces paquets communs, et ont alors tous vos autres projets résolvent les bibliothèques communes par la dépendance transitive:

<?xml version="1.0"?> 
    <ivy-module version="2.0"> 
     <info organisation="com.example" module="common-libs"/> 
      <configurations> 
      <conf name="runtime" transitive="true" visibility="public" /> 
      <conf name="master" transitive="true" visibility="public" /> 
      <conf name="compile" transitive="true" visibility="public" /> 
      <conf name="default" transitive="true" visibility="public" extends="master" /> 
      </configurations> 
      <dependencies> 
       <dependency org="oracle" name="ojdbc14_g" rev="10.2.0.3" 
conf="compile->compile(*),master(*);runtime->runtime(*);master->master(*)"/> 
       <dependency org="tomcat" name="servlet-api" rev="6.0.16" 
conf="compile->compile(*),master(*);runtime->runtime(*);master->master(*)"/> 
       <dependency org="junit" name="junit" rev="4.3" 
conf="compile->compile(*),master(*);runtime->runtime(*);master->master(*)"/> 
      </dependencies> 
    </ivy-module> 

et pour un projet typique:

<?xml version="1.0"?> 
    <ivy-module version="2.0"> 
    <info organisation="com.example" module="myproject"/> 
     <configurations> 
     <conf name="runtime" transitive="true" visibility="public" /> 
     <conf name="master" transitive="true" visibility="public" extends="runtime"/> 
     <conf name="compile" transitive="true" visibility="public" /> 
     <conf name="default" transitive="true" visibility="public" extends="master" /> 
     </configurations> 
     <dependencies> 
     <dependency org="com.example" name="common-libs" rev="latest.release" 
      conf="compile->compile(*),master(*);runtime->runtime(*);master->master(*)"/> 
     </dependencies> 
    </ivy-module> 

Ici, j'utilise les conventions de dénomination de configuration traditionnelles des traductions POM-> Ivy du résolveur Maven, bien que vous puissiez mapper les noms de configuration d'une manière qui vous semble logique. J'ai tendance à utiliser la tâche ivy: install pour copier des modules Maven dans notre dépôt Ivy, donc j'utilise le plus souvent ivy.xmls par défaut. Si vous utilisez IvyRoundup, vous souhaiterez principalement mapper la configuration "par défaut" de manière transitive.

2

Si vous utilisez ivy de la fourmi et que vous utilisez Ant 1.6 ou ultérieur, vous pouvez utiliser la tâche <import> pour inclure des fragments de fichier de construction dans votre fichier de génération ant. Les fichiers référencés doivent être des fichiers de construction complète Ant, si:

<?xml version="1.0"?> 
<project name="my-project" default="usage" basedir="."> 
    <target name="setup"> 
    ... 
    </target> 

    <import file="./common.xml"/> 
    ... 
</project> 

Vous pouvez également utiliser la syntaxe XML standard à partir de votre fichier ivy.xml ou build.xml:

<?xml version="1.0"?> 
<!DOCTYPE project [ 
     <!ENTITY common SYSTEM "common.xml"> 
]> 
<project name="my-project" default="usage" basedir="."> 
    <target name="setup"> 
    ... 
    </target> 

    &common; 
    ...  
</project> 

Cela comprend littéralement le contenu de common.xml où vous avez placé l'entité &common;.

(Le nom de fichier common.xml dans cet exemple est résolu par rapport au fichier XML contenant par l'analyseur XML. Vous pouvez également utiliser un URI protocole file: absolu.)

Questions connexes