|
Ant - L'automatisation des tâches du programmeur
4.Création d’une tâche
personnalisée
L’écriture d’une
nouvelle tâche est illustrée par l’exemple
suivant : nous en développerons une qui testera si un
fichier est éditable. Cela peut se justifier par le fait que
des commandes comme replace ne s’exécutent que si
un fichier est autorisé en écriture. Il est donc
judicieux de développer une tâche, qui définisse
un attribut myFile, associé
à canWrite lorsque le fichier spécifié
avec l’attribut filename est
autorisé en écriture :
/**
*
this task test if the destination file is writeable
*/
import
java.io.File ;
import
org.apache.tools.ant.BuildException ;
import
org.apache.tools.ant.Task ;
public
class TesteAcces extends Task {
//
the file which will be used
private
String filename ;
//
this setter define the filename variable,
//
it is called automatically by the xml attribut
public
void setFilename(String filename){
this.filename
= filename;
}
/**
* Override
the execute() method
* @exception
BuildException, if something wrong happens,
* it
allows us to throw the problem.
*
@todo refactor !
*/
public
void execute() throws
BuildException {
//
retrieves a file
File
myFile = new File(filename);
//
checks if the file is writeable
if(moyFile.canWrite()){
project.setUserProperty("myFile",
"canWrite");
}
}
}
Dans le code Java, il faut prendre en
considération ceci :
-
La nouvelle tâche doit dériver de la classe abstraite
org.apache.tools.ant.Task.
-
Il faut implémenter la méthode execute(),
appelée à l’exécution de la tâche.
La méthode execute() doit
pouvoir lever une exception BuildException.
-
Pour chaque attribut (uniquement filename
ici), un accesseur doit être écrit.
D’autre part, on pourra
réaliser les initialisations en implémentant la méthode
init().
Deux champs publics : project
et location permettent de modifier
l’environnement dans lequel la tâche s’exécute
(voir l’API).
Pour utiliser une tâche, il
faut qu’elle soit compilée, qu’elle soit déclarée
dans taskdef et qu’elle se
trouve dans le CLASSPATH :
<taskdef
name="accesOk"
classname="TestAccess"
classpath="${build.dir}"
/>
<target
name="main"
depends="TestAccess"
if="myFile">
<replace
File="labo.txt"
Token="test"
Value="java"
summary="true"/>
</target>
<target
name="TestAccess">
<accesOk
filename="${test.file.path}"
/>
<echo
message="The
file ${test.file.path} is writeable = ${myFile}" />
</target>
A la deuxième ligne, la classe
(ici dans le package par défaut) est déclarée
avec le nom accesOk. Ensuite, dans
la cible main, une dépendance
de la cible TestAcces est reconnue
et exécutée. Si la permission en écriture est à
vrai, la propriété myFile
est définie et envoyé à la sortie avec un echo.
Sans droit d’écriture, la propriété n’est
pas définie et l’attribut if de la cible main
veille à ce que les tâches de la cible main
ne soient pas exécutées. Mais si l’attribut est
défini et qu’il existe des permissions en écriture,
un remplacement de texte, par exemple dans la cible main,
peut être effectué sur le fichier.
Notre fichier est labo.txt, et il est
placé à la racine du projet. Il contient le texte
« text », qui
sera remplacé par « java ».
|
|
 |