Eclipse


Eclipse RCP : intéragir avec une tache ANT

Dans cet article je vais décrire comment lancer, dans une application RCP, une tâche Ant et surtout comment intéragir avec : input, console...

Tout d'abord, voici le script Ant à manipuler :

<project default="main">
    <target name="deploy.checks">
        <input message="Etes vous sûrs de vouloir lancer ce script?"
         validargs="o,n" addproperty="do.answer.runtime" />
        <condition property="do.abort.runtime">
            <equals arg1="n" arg2="${do.answer.runtime}"/>
        </condition>
        <fail if="do.abort.runtime">Abandon.</fail>
 </target>
    <target name="main" depends="deploy.checks">
     <echo message="Run from Eclipse!"/>
    </target>
</project>

Comme on le voit, celui-ci est assez simple, avec une tâche de demande de saisie et une tâche principale affichant des informations. Pour continuer, notre outil va avoir besoin des librairies suivantes :

  • ant.jar
  • ant-launcher.jar

Et voici le code :

import java.io.File;
import java.io.PrintStream;

import org.apache.tools.ant.BuildException;
import org.apache.tools.ant.DefaultLogger;
import org.apache.tools.ant.Project;
import org.apache.tools.ant.ProjectHelper;
import org.apache.tools.ant.input.DefaultInputHandler;
import org.apache.tools.ant.input.InputRequest;
import org.eclipse.jface.dialogs.InputDialog;
import org.eclipse.jface.window.Window;
import org.eclipse.swt.widgets.Display;
import org.eclipse.ui.console.ConsolePlugin;
import org.eclipse.ui.console.IConsole;
import org.eclipse.ui.console.MessageConsole;

public class RunAntBuild {

 public static void build() {
  // Fichier ant
  File buildFile = new File("...");
  
  // projet ant
  Project p = new Project();
  
  // gestion des inputs ant
  p.setInputHandler(new PluginInputHandler());
  
  // definition du logger...
  DefaultLogger consoleLogger = new DefaultLogger();
  
  // ... qui sera une console
  MessageConsole capiBuildConsole = new MessageConsole("AntConsole", null);
  
  // on ajoute notre console ant aux consoles de l'IDE Eclipse
  ConsolePlugin.getDefault().getConsoleManager().addConsoles(new IConsole[] {
   capiBuildConsole
  });
  
  // le stream de sortie pour ant
  PrintStream printStream = new PrintStream(capiBuildConsole.newOutputStream());
  consoleLogger.setErrorPrintStream(printStream);
  consoleLogger.setOutputPrintStream(printStream);
  consoleLogger.setMessageOutputLevel(Project.MSG_INFO);
  p.addBuildListener(consoleLogger);
  
  // definition des propriétés
  p.setUserProperty("ant.file", buildFile.getAbsolutePath());
  
  p.init();
  ProjectHelper helper = ProjectHelper.getProjectHelper();
  p.addReference("ant.projectHelper", helper);
  helper.parse(p, buildFile);
  p.executeTarget(p.getDefaultTarget());

 }

 static class PluginInputHandler extends DefaultInputHandler {
  @Override
  public void handleInput(InputRequest arg0) throws BuildException {
   InputDialog dlg = new InputDialog(Display.getCurrent().getActiveShell(), "Vérification", arg0.getPrompt() + " (o/n)", "",
     null);
   if (dlg.open() == Window.OK) {
    arg0.setInput(dlg.getValue());
   }
  }
 }

}

Le code et les commentaires parlent d'eux-mêmes, mais il est intéressant de noter l'utilisation de la console via le ConsolePlugin et de l'InputDialog comme utilitaire pour permettre la saisie de paramètres d'entrée.

Voici donc le résultat en images :

Ouverture de la fenêtre d'input au début du script

Affichage dans la console des sorties texte du script

Et voilà! En espérant vous avoir fait gagner du temps...


Fichier(s) joint(s) :

0 commentaires: