2009-09-16 7 views
4

Comment écrire (ou remplacer) le contenu suivant:Ant, (plus) écrire dans un fichier

  <dependencies> 
      <dependency> 
       <groupId>ged.eprom</groupId> 
       <artifactId>epromx</artifactId> 
       <version>${version.to.set}</version> 
       <classifier>stubjava</classifier> 
      </dependency> 
     </dependencies> 

dans le fichier appelé pom.xml dans le répertoire courant.

J'ai essayé le script ant:

 <echo file="pom.xml"> 
     <dependencies> 
      <dependency> 
       <groupId>ged.eprom</groupId> 
       <artifactId>epromx</artifactId> 
       <version>${version.to.set}</version> 
       <classifier>stubjava</classifier> 
      </dependency> 
     </dependencies> 
    </echo> 

Mais j'obtenu le message d'erreur:

echo doesn't support the nested "dependencies" element. 

Répondre

3

L'analyseur de fourmi est en train de lire les données que vous voulez faire l'écho comme une tentative d'ajouter des éléments enfants invalides à un parent <echo/>. Si vous souhaitez faire écho à cette information vers pom.xml, vous devez utiliser les &lt; et &gt; entités pour coder votre sortie de l'élément:

<echo file="pom.xml"> 
      &lt;dependencies&gt; 
        &lt;dependency&gt; 
          &lt;groupId&gt;ged.eprom&lt;/groupId&gt; 
          &lt;artifactId&gt;epromx&lt;/artifactId&gt; 
          &lt;version&gt;${version.to.set}&lt;/version&gt; 
          &lt;classifier&gt;stubjava&lt;/classifier&gt; 
        &lt;/dependency&gt; 
      &lt;/dependencies&gt; 
</echo> 
24

Vous devez échapper au contenu d'une balise CDATA, cela signifie aussi qu'il ne sera pas interpréter la substitution de variable, donc je le décomposerais en trois instructions d'écho.

<echo file="pom.xml"><![CDATA[ 
      <dependencies> 
        <dependency> 
          <groupId>ged.eprom</groupId> 
          <artifactId>epromx</artifactId> 
          <version>]]></echo> 
    <echo file="pom.xml" append="true">${version.to.set}</echo> 
    <echo file="pom.xml" append="true"><![CDATA[</version> 
          <classifier>stubjava</classifier> 
        </dependency> 
      </dependencies> 
    ]]> </echo> 
+0

Bonne capture sur la substitution $ {} – skaffman

+0

Notez que Ant a développé des propriétés dans les blocs CDATA depuis la version 1.8.0. Vous pouvez utiliser l'attribut 'expandProperties' sur' replacetoken' pour contrôler ce comportement. – sherb

13

Vous avez la tâche echoxml:

http://ant.apache.org/manual/Tasks/echoxml.html

<echoxml file="pom.xml"> 
    <dependencies> 
    <dependency> 
     <groupId>ged.eprom</groupId> 
     <artifactId>epromx</artifactId> 
     <version>${version.to.set}</version> 
     <classifier>stubjava</classifier> 
    </dependency> 
    </dependencies> 
</echoxml> 
+2

Bien que cela ne soit pas important pour cet extrait XML particulier, il convient de noter que la tâche echoxml' n'écrit pas nécessairement le XML que vous lui donnez mot pour mot. Par exemple, au moins lors de l'utilisation de Ant 1.8.2 sous Windows (et probablement d'autres versions sur d'autres plates-formes), l'utilisation de la tâche echoxml' semble changer l'ordre alphabétique des noeuds d'attributs: ' ' sera écrit avec l'ordre d'attribut commuté alphabétiques, par exemple ' ' –

Questions connexes