Question

Y at-il un moyen bien établi pour partager Ant entre les projets cibles? J'ai une solution actuellement, mais il est un peu inélégante. Voici ce que je fais jusqu'à présent.

J'ai un fichier appelé ivy-tasks.xml hébergé sur un serveur sur notre réseau. Ce fichier contient, entre autres objectifs, les tâches de gestion des dépendances boilerplate de projet avec Ivy . Par exemple:

<project name="ant-ivy-tasks" default="init-ivy"
         xmlns:ivy="antlib:org.apache.ivy.ant">
  ...
  <target name="ivy-download" unless="skip.ivy.download">
    <mkdir dir="${ivy.jar.dir}"/>
    <echo message="Installing ivy..."/>
    <get src="http://repo1.maven.org/maven2/org/apache/ivy/ivy/${ivy.install.version}/ivy-${ivy.install.version}.jar"
         dest="${ivy.jar.file}" usetimestamp="true"/>
  </target>

  <target name="ivy-init" depends="ivy-download"
          description="-> Defines ivy tasks and loads global settings">
    <path id="ivy.lib.path">
      <fileset dir="${ivy.jar.dir}" includes="*.jar"/>
    </path>
    <taskdef resource="org/apache/ivy/ant/antlib.xml"
             uri="antlib:org.apache.ivy.ant"
             classpathref="ivy.lib.path"/>
    <ivy:settings url="http://myserver/ivy/settings/ivysettings-user.xml"/>
  </target>
  ...
</project>

La raison pour laquelle ce fichier est hébergé est parce que je ne pas veulent:

  • Vérifiez le fichier dans chaque projet qui en a besoin -. Cela se traduira par la duplication, ce qui rend le maintien des cibles plus difficiles
  • Avoir mon build.xml dépendent de vérifier un projet de contrôle de source - ce qui fera la construction ont plus XML au plus haut niveau juste pour accéder au fichier
  • .

Ce que je fais avec ce fichier dans les build.xmls de mes projets est le long des lignes de:

<property name="download.dir" location="download"/>
<mkdir dir="${download.dir}"/>
<echo message="Downloading import files to ${download.dir}"/>

<get src="http://myserver/ivy/ivy-tasks.xml" dest="${download.dir}/ivy-tasks.xml" usetimestamp="true"/>
<import file="${download.dir}/ivy-tasks.xml"/>

La partie « sale » à ce sujet est que je dois faire les étapes ci-dessus en dehors d'une cible , parce que le

Était-ce utile?

La solution

Si vous utilisez ANT 1.8+, alors vous pouvez importer le build.xml directement à partir de l'emplacement hébergé.

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

  

Depuis Ant 1.8.0 la tâche peut aussi   ressources à l'importation à partir d'URL ou   ressources classpath (qui sont des URL,   vraiment). Si vous avez besoin de savoir si   source du fichier actuel de construction a   été un fichier ou une URL que vous pouvez consulter   la propriété ant.file.type.projectname   (En utilisant le même exemple que ci-dessus   ant.file.type.builddocs) qui soit   ont la valeur "fichier" ou "url".

<!-- importing.xml -->
<project name="importing" basedir="." default="...">
  <import file="http://myserver/ivy/ivy-tasks.xml"/>
</project>

Autres conseils

Si vous utilisez Antlibs vous pouvez les regrouper tous dans un fichier JAR . Ensuite, il suffit de copier ce fichier dans le répertoire ${ANT_HOME}/lib de les utiliser.

Après quelques recherches supplémentaires, une solution possible serait d'utiliser SVN pour vérifier externals des fichiers requis spécifiques qui peuvent être nécessaires par le build.xml.

Cependant, cela ne fonctionne que pour les utilisateurs qui utilisent Subversion comme contrôle de code source. Il serait toujours agréable d'avoir une solution SCM-agnostique pour les utilisateurs qui n'utilisent pas Subversion ou un autre SCM qui prend en charge des fonctionnalités similaires.

Ce que nous avons fait est de créer un projet appelé « bootstrap » qui contient les différents fichiers XML nécessaires pour les autres projets à notre bureau. Donc, pour mettre en place votre environnement de développement vous exécutez build.xml dans bootstrap qui copie les fichiers xml-(comme votre lierre choses, et d'autres cibles) à un emplacement connu, puis vos fichiers de build comprennent ceux-ci comme ceci:

<import file="${ant.bootstrap.dir}/ant-commons.xml" />
<import file="${ant.bootstrap.dir}/ant-commons-ear.xml" />

Notre build.xml bootstrap contient ceci:

<target name="install">
        <fail unless="ant.bootstrap.dir" message="ant.bootstrap.dir ${missing.property.message}"/>
        <copy todir = "${ant.bootstrap.dir}">
            <fileset dir = "src/xml"/>
        </copy>
</target>
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top