2009-11-19 6 views
6

Ho un ivy.xml piuttosto grande contenente un numero di configurazioni che sono le stesse per un numero di progetti.Come includere un file in ivy.xml?

Vorrei suddividere questa sezione ripetitiva di grandi dimensioni in un file di inclusione comune. In qualche modo non riesco a trovare alcuna documentazione che descriva che questo può essere fatto.

Chiunque abbia un'idea se questo è fattibile?

EDIT: Dopo un po 'di riflessione, penso che questo non è fattibile di proposito. Un file Ivy è pensato per essere un'unità coesiva e non dovrebbe contenere riferimenti basati su file, solo riferimenti ad altri moduli dell'edera ...

risposta

9

Si potrebbe creare un meta-modulo di edera, che dipende su tutti i pacchetti comuni, e quindi hanno tutti i vostri altri progetti risolvere le librerie comuni attraverso transitiva delle dipendenze:

<?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> 

e per un progetto tipico:

<?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> 

Qui sto usando le tradizionali convenzioni di denominazione della configurazione dalle traduzioni POM-> Ivy del resolver Maven, sebbene sia possibile mappare i nomi di configurazione in qualsiasi modo che avesse senso per voi. Tendo ad usare l'ivy: install task per copiare i moduli Maven nel nostro repository Ivy, quindi per la maggior parte utilizzo il ivy.xmls predefinito. Se stai utilizzando IvyRoundup, in primo luogo vorrai mappare la configurazione "predefinita" in modo transitorio.

2

Se si utilizza edera da formica e si esegue Ant 1.6 o successivo, è possibile utilizzare l'attività <import> per includere i frammenti di file di build nel tuo file di build ant. I file di riferimento devono essere complete file Ant, però:

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

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

Si potrebbe anche usare la sintassi XML standard dall'interno ivy.xml o build.xml del file:

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

    &common; 
    ...  
</project> 

Ciò letteralmente includere il contenuto di common.xml dove hai inserito l'entità &common;.

(Il nome del file common.xml in questo esempio viene risolto relativo al file XML contenente dal parser XML. Si può anche utilizzare un assoluto file: protocollo URI.)