Ant

Présentation

Ant est un projet open source de la fondation Apache écrit en Java qui vise le développement d’un logiciel d’automatisation des opérations répétitives tout au long du cycle de développement logiciel.

Ant pourrait être comparé au célèbre outil make sous Unix. Il a été développé pour fournir un outil de construction indépendant de toute plate-forme. Ceci est particulièrement utile pour des projets développés sur et pour plusieurs systèmes ou pour migrer des projets d’un système vers un autre. Il est aussi très efficace pour de petits développements.

Ant repose sur un fichier de configuration XML qui décrit les différentes tâches qui devront être exécutées par l’outil. Ant fournit un certain nombre de tâches courantes qui sont codées sous forme de classes Java. Ces tâches sont donc indépendantes du système sur lequel elles seront exécutées. De plus, il est possible d’ajouter ces propres tâches en écrivant de nouvelles classes Java respectant certaines spécifications.

Installation

wget http://apache.mirrors.ovh.net/ftp.apache.org/dist//ant/binaries/apache-ant-1.9.4-bin.zip
unzip apache-ant-1.9.4-bin.zip
mv apache-ant-1.9.4 /opt
ln -s /opt/apache-ant-1.9.4 /opt/ant

Il est possible d’ajouter dans son .bashrc

alias ant="/opt/apache-ant-1.9.4/bin/ant"

et pour windows dans son alias.bat par exemple

@doskey ant=C:\java\apache-ant-1.9.4\bin\ant $*

Utilisation

Toutes l’utilisation de ant est réglé par la création d’un fichier xml contenant les tâches à réaliser.

Les tâches classiques qu’on peut réaliser:

  • gestion de fichier (création, suppression, déplacement)
  • gestion de répertoire (création, suppression, déplacement)
  • compilation de code
  • transfert
  • message

hello world!

notre fichier xml build.xml

<project default="task_hello">
  <target name="task_hello">
      <echo message="hello world!"/>
  </target>
</project>

Il suffit maintenant de lancer ant

ant

et nous avons pour résultat

Unable to locate tools.jar. Expected to find it in C:\Program Files\Java\jre1.8.0_31\lib\tools.jar
Buildfile: C:\Users\faoustin\Downloads\build.xml

task_hello:
     [echo] hello world!

BUILD SUCCESSFUL
Total time: 0 seconds

Basique

Il est possible de passer des arguments lors de l’appel

<project default="task_hello">
   <target name="task_hello">
      <echo message="hello world!"/>
  </target>
  <target name="task_msg">
      <echo message="mon message: ${msg}"/>
  </target>
</project>

appel de ant

ant -Dmsg=coucou task_msg

Note

il est possible de passer le target à lancer dans ant

et le resultat

Unable to locate tools.jar. Expected to find it in C:\Program Files\Java\jre1.8.0_31\lib\tools.jar
Buildfile: C:\Users\faoustin\Downloads\build.xml

task_msg:
     [echo] mon message: coucou

     BUILD SUCCESSFUL
     Total time: 0 seconds

Il est possible de rajouter une balise input pour demander à l’utilisateur le message qu’il souhaite voir

<project default="task_hello">
    <target name="task_hello">
        <echo message="hello world!"/>
    </target>
    <target name="task_msg">
          <input message="tapez votre message:"
                addproperty="msg"
                defaultvalue="coucou"/>
          <echo message="mon message: ${msg}"/>
    </target>
</project>

et voilà son utilisation

Unable to locate tools.jar. Expected to find it in C:\Program Files\Java\jre1.8.0_31\lib\tools.jar
Buildfile: C:\Users\faoustin\Downloads\build.xml

task_msg:
    [input] tapez votre message: [coucou]
    tutu et toto sont sur un bateau
         [echo] mon message: tutu et toto sont sur un bateau

         BUILD SUCCESSFUL
         Total time: 7 seconds

Il est possible dans echo de rajouter une information de niveau de log avec l’attribut level qui peut avoir comme valeur:

  • error
  • warning
  • info
  • verbose
  • debug

Les paramètres de la commande ant indiquant le niveau de log souhaité

  • -debug
  • -verbose
  • -quiet

Ssh

exemple de build.xml permettant de lancer des commandes sur un serveur distant

<project default="test">
    <target name="test">
        <sshexec host="192.168.136.128"
            username="your-user"
            password="your-password"
            command="/etc/init.d/exim4 restart"
            trust="true"/>
    </target>
</project>

Note

sshexec nécessite la librairie jsch qu ‘il faut télécharger sur le net

wget http://sourceforge.net/projects/jsch/files/jsch.jar/0.1.51/jsch-0.1.51.jar/download
mv download /opt/ant/lib

Warning

l’utilisation de l’attribut trust permet de se connecter sur le serveur sans vérifier que le serveur est inscrit dans $home/.ssh/know_hosts cela est une faille de sécurité

Sql

Il est possible de lancer une commande sql ou un fichier sql via une tâche ant

<project default="test">
    <target name="test">
           <sql driver="org.postgresql.Driver"
                url="jdbc:postgresql://localhost/test"
                userid="postgres"
                password="postgres"
                autocommit="true">
           INSERT INTO TABLETEST(ID,LIB) VALUES (1,'tutu');
           </sql>
    </target>
</project>

Note

on peut utiliser l’attribut src, la balise transaction pour utiliser un ou plusieurs fichiers sql

Warning

il faut trouver dans le classpath ou dans le dossier lib de ant la librairie jar du driver jdbc

Git

Il n’existe pas de fonction git native dans ant, mais on peut les définir

<macrodef name = "git">
    <attribute name = "command" />
    <attribute name = "dir" default = "" />
    <element name = "args" optional = "true" />
    <sequential>
        <echo message = "git @{command}" />
        <exec executable = "git" dir = "@{dir}">
            <arg value = "@{command}" />
            <args/>
        </exec>
    </sequential>
</macrodef>

<macrodef name = "git-clone-pull">
    <attribute name = "repository" />
    <attribute name = "dest" />
    <sequential>
        <git command = "clone">
            <args>
                <arg value = "@{repository}" />
                <arg value = "@{dest}" />
            </args>
        </git>
        <git command = "pull" dir = "@{dest}" />
    </sequential>
</macrodef>

l’utilisation est alors simple, pour un clone

<git command = "clone">
    <args>
        <arg value = "git://github.com/280north/ojunit.git" />
        <arg value = "ojunit" />
    </args>
</git>

pour un pull

<git command = "pull" dir = "repository_path" />

Un projet Java

On souhait avoir un fichier build.xml qui puisse

  • compiler du code java
  • générer un jar
  • lancer le jar

notre projet est constitué ainsi

projet
 |__ bin
 |__ src
      |__ org
          |__ sdf
                |__ HelloWorld.java

Le fichier HelloWorld.java est ainsi

package org.sdf;

public class HelloWorld {
public static void main(String[] args) {
System.out.println("Hello World");
}
}

le build.xml

<project default="run">

<property name="src.dir"     value="src"/>
<property name="bin.dir"   value="bin"/>
<property name="jar.dir" value="exe"/>
<property name="main-class"  value="org.sdf.HelloWorld"/>

<target name="clean">
<delete dir="${bin.dir}"/>
<delete dir="${jar.dir}"/>
<echo message="nettoyage termine"/>
</target>

<target name="compile" depends="clean">
<mkdir dir="${bin.dir}"/>
<javac srcdir="${src.dir}" destdir="${bin.dir}"/>
<echo message="compilation terminee"/>
</target>

<target name="jar" depends="compile">
<mkdir dir="${jar.dir}"/>
  <jar destfile="${jar.dir}/sdf.jar" basedir="${bin.dir}">
    <manifest>
      <attribute name="Main-Class" value="${main-class}"/>
    </manifest>
  </jar>
<echo message="Creation du fichier Jar terminee"/>
</target>

<target name="run" depends="jar">
<java jar="${jar.dir}/sdf.jar" fork="true"/>
</target>

</project>

http://skebir.developpez.com/tutoriels/java/ant/ ant et git http://tlrobinson.net/blog/2008/11/ant-tasks-for-git/