Exécution d'un script ant avec un code JAVA

Exécution d'un script ant avec un code JAVA - Java - Programmation

Marsh Posté le 17-01-2008 à 20:13:15    

Bonsoir,
 
J'ai suis tout nouveau dans le monde d'ANT, ce que je vais pouvoir dire va surement vous paraitre peu clair, je fais du mieux que je peux.
 
J'ai un script ant qui s'apelle deploy et qui se citue dans le répertoire : D:\Program Files\Sun\SunSPOT\sdk\ant .
J'utilise ce script pour envoyer des programmes sur des capteurs par onde radio.
 
Voila ce que je tape dans la console DOS pour arriver a mes fins :
 

Citation :

D:\>cd "Program Files\Sun\SunSPOT\Demos\CodeSamples\TemperatureSensorSampleCode"
 
 
D:\Program Files\Sun\SunSPOT\Demos\CodeSamples\TemperatureSensorSampleCode>ant deploy -DremoteId=0014.4F01.0000.0A6C


Donc enfait, j'appelle le script deploy depuis le repertoire où se trouve le code de l'application que je veux envoyer par radio. Et de plus je lui passe en paramètre l'adresse du capteurs sur lequel il doit le deployer (-DremoteId=0014.4F01.0000.0A6C)
 
Donc j'arrive très bien à faire ce que je veux sous la console dos, mais maintenant il faut que je fasse la même chose mais grace à un code java.
 
En naviguant sur la toile j'ai trouvé sur un forum comment exécuter un script ANT depuis du code JAVA :
 

Citation :

String[] args = {"-buildfile", "path_to_my_build_file/build.xml"};
org.apache.tools.ant.Main.start(args, null, null);


Mais je n'arrive pas a l'appliquer dans mon cas précis où il faut que j'exécute le script deploy avec un paramètre depuis un autre répertoire  :pt1cable: .
 
I send an SOS to the world.
dieZ

Reply

Marsh Posté le 17-01-2008 à 20:13:15   

Reply

Marsh Posté le 18-01-2008 à 01:22:21    

up plz !

Reply

Marsh Posté le 18-01-2008 à 10:01:49    

?? j'imagine que le dernier des paramètre du Main est le répertoire de travail, non ?
 
c'est pas ça que tu cherches ?


---------------
HFR - Mes sujets pour Chrome - Firefox - vérifie les nouveaux posts des topics suivis/favoris
Reply

Marsh Posté le 18-01-2008 à 10:25:01    

Etant toujours aussi nul en ANT depuis hier soir, j'ai une question :
 
Il ne faut pas etre dans le répertoire courant du script deploy pour pouvoir le lancer ?
 
Merci pour ta réponse :)
dieZ

Reply

Marsh Posté le 18-01-2008 à 10:37:55    

up !


Message édité par diez le 18-01-2008 à 10:43:36
Reply

Marsh Posté le 18-01-2008 à 10:44:09    

lire l'erreur ?

 

edit: petit filou !


Message édité par brisssou le 18-01-2008 à 10:44:29

---------------
HFR - Mes sujets pour Chrome - Firefox - vérifie les nouveaux posts des topics suivis/favoris
Reply

Marsh Posté le 18-01-2008 à 10:51:34    

Ben je ne comprends pas comment avec la fonction qui m'est fournit :  
Lancer le script deploy depuis le répertoir ou se trouve mon build.xml
 

Citation :

String[] args = {"-buildfile", "path_to_my_build_file/build.xml"};
org.apache.tools.ant.Main.start(args, null, null);


 
Où est-ce que j'appelle mon script ANT deploy dans cette fontion ? Comment je lui passe des paramètres ?
J'ai bien compris que les paramètres devraient etre passé à la place du premier null car la syntaxe est :  

Citation :

start(java.lang.String[] args, java.util.Properties additionalUserProperties, java.lang.ClassLoader coreLoader)  


 
Mais comment expliquer gentillement à cette fonction que je voudrais appeller le deploy ? :'(

Reply

Marsh Posté le 18-01-2008 à 11:00:09    

tu rajoutes des arguments dans le tableau de String


---------------
HFR - Mes sujets pour Chrome - Firefox - vérifie les nouveaux posts des topics suivis/favoris
Reply

Marsh Posté le 18-01-2008 à 11:42:47    

et comment l'apel au script deploy est géré ?


Message édité par diez le 18-01-2008 à 11:43:41
Reply

Marsh Posté le 18-01-2008 à 13:19:51    

tu lis la doc ?


---------------
HFR - Mes sujets pour Chrome - Firefox - vérifie les nouveaux posts des topics suivis/favoris
Reply

Marsh Posté le 18-01-2008 à 13:19:51   

Reply

Marsh Posté le 18-01-2008 à 13:51:41    

Il s'agit de quel documentation ?

Reply

Marsh Posté le 18-01-2008 à 14:38:24    

chai pas, c'est de tomcat ?
 
ou alors celle de ant, je sais plus.


---------------
HFR - Mes sujets pour Chrome - Firefox - vérifie les nouveaux posts des topics suivis/favoris
Reply

Marsh Posté le 19-01-2008 à 03:03:13    

Salut,
 

diez a écrit :

En naviguant sur la toile j'ai trouvé sur un forum comment exécuter un script ANT depuis du code JAVA :
...


 
Et pourquoi pas un vulgaire "exec" en Java :
 
Runtime.getRuntime().exec("ant chemin_complet_de_mon_script_ant" );
 
C'est pas dur, la String dans l'exec c'est exactement ce que tu tapes dans ta console (en 1 seule commande) pour lancer ton script Ant...
 
@++

Reply

Marsh Posté le 19-01-2008 à 12:30:24    

Bonjour,
 
Effectivemment j'y ai pensé à cette méthode, mais il y aura un soucis de portabilité de semble t'il.
Le code que je produirais ne sera executable que depuis une plateforme Windows non ?
 
dieZ

Reply

Marsh Posté le 19-01-2008 à 14:04:17    

Re,
 
j'ai donc enfin réussi à faire un code qui exécute une target ici deploy depuis un build.xml :
 

Citation :

import org.apache.tools.ant.*;
 
import java.util.*;
import java.io.*;
 
class Aide {
 public static void main(String argv[]) {
   
  Properties userProps = new Properties();
  //userProps.setProperty("arg1", "-DremoteId=0014.4F01.0000.0A6C" );
  ClassLoader loader = null; // or a specific classloader
 
 
  File buildFile = new File("lien_build.xml" );
  String[] args = {"-buildfile", buildFile.toString(), "deploy"};
 
  try {
   Main m = new Main();  
   m.start(args, userProps, loader);
   }
   catch(BuildException be1) { System.out.println("ahaha0" ); }
  }
 }
 


Remarque : dans le lien de votre build.xml il faut rajouter un \ à chaque \ . Ex : D:\\Program Files\\Sun\\SunSPOT\\Demos\\CodeSamples\\TemperatureSensorSampleCode\\build.xml
 
 
Cependant comme vous pouvez le remarquer j'ai laissé une ligne en commentaire :

Citation :

 //userProps.setProperty("arg1", "-DremoteId=0014.4F01.0000.0A6C" );


 
Il s'agit la de passer un paramètre à mon target. Ici je voudrais lui passer -DremoteId=0014.4F01.0000.0A6C.
Cependant cele ne marche pas,si quelqu'un a une idée ou si je n'utilise pas la bonne synthaxe faite me le savoir s'il vous plait.
 
De plus, j'aiemrais aussi récupérer tout ce qui est retourné dans la console dans le but de l'afficher ailleur, est-ce possible ? (je penses) Comment faire ?
 
thx mates,
dieZ


Message édité par diez le 19-01-2008 à 14:34:41
Reply

Marsh Posté le 20-01-2008 à 20:21:53    

Yo,
 
Je reviens après un weekend de recherche sur la question : Comment exécuter un target ant depuis un code JAVA ?
J'ai trouvé plusieurs méthodes :
 
  I) Main :
 Cette classe de org.apache.tools.ant nous propose une fonction start()
 
 

Citation :

File buildFile = new File("D:\\lien\\vers\\mon\\build.xml" );
  String[] args = {"-buildfile", buildFile.toString(), "target"};
  try {
   Main m = new Main();  
   m.start(args, userProps, loader);
   }
   catch(BuildException be1) { System.out.println("ahaha0" ); }


   
  II) Project, ProjectHelper
 Ces classes nous permettent d'associer un projet à un .xml ( parse() ) et enfin d'exécuter un target ( executeTarget() )  
   
     

Citation :

Project ant = new Project();
      ProjectHelper helper = new ProjectHelperImpl();
      ant.init();
      helper.parse(ant, new File("build.xml" ));
      ant.executeTarget("nom du target" );


   
   
Voila le fruit de mes recherche.
Alors concrétement, la première méthode marche parfaitement cependant elle fait quitter le programme JAVA qui l'apelle après l'éxecution du target. C'est bien, mais pas top. En effet, mon application lancer une interface graphique qui se coupe donc dès que l'exécution du taget est finit ....
Puis, la seconde méthode (qui est tres intéressante pour palier au problème de la première) ne fonctionne pas conrectement chez moi, elle ne trouve pas un target qui dépend du target que j'exécute. En d'autre mot, le target (apellons le X) que j'appelle dépend d'autres targets (appelons les Y et Z), quand je lance l'exécution du target X avec la 2eme méthode, une erreur m'est reporté en m'expliquant qu'il ne trouve pas le target Y ...
 
 

Citation :

Target `Y' does not exist in this project. It is used from target `X'


 
Je ne sais pas si ca peut servir mais j'ai une explication à fournir en plus :
 Le build.xml qui est associé au projet par la fonction parse() est composé de :  
  <import file="${sunspot.home}/build.xml"/>
 C'est grace à cet import qu'il trouve mon target que j'appelle.
   
 
Ma demande est donc :
 ¤ savez-vous si il est possible d'empécher que le programme JAVA qui appelle la méthode 1 se termine après l'exécution du target
 ¤ savez-vous comment fixer l'erreur de la méthode 2 ?
 
Merci d'avance, dieZ
 

Reply

Marsh Posté le 21-01-2008 à 20:39:25    

up !

Reply

Marsh Posté le 04-09-2008 à 18:49:51    

Bonjour,
 
je rencontre un problème sur ce même bout de code.
 
voici mon code pour lancer une tache ant depuis java :
 

Citation :


 public void lanceAnt001() {
 
 Project ant = new Project();
 ProjectHelper helper = new ProjectHelperImpl();
 
 //ajouter un listener pour voir les événements généré par ant
 org.apache.tools.ant.DefaultLogger log = new org.apache.tools.ant.DefaultLogger();  
 
 log.setOutputPrintStream(System.out);
 log.setMessageOutputLevel(Project.MSG_INFO);
 ant.addBuildListener(log);
 
 File buildFile = new File("[...] /webapp/stylesheets/ant/".concat("build-devel.xml" ));
 ant.init();
 helper.parse(ant, buildFile);
 ant.executeTarget("maTargetAnt" );


 
erreur renvoyée :
 

Citation :


BuildException
Message Target "maTargetAnt" does not exist in the project "xxxx".  


 
hors ma target existe bien dans le fichier xml
 
Toutes mes recherches et tentatives se sont soldées par un echec.
 
Avez-vous une idée ? merci :)

Reply

Marsh Posté le 04-11-2008 à 11:35:45    

Bonjour,  
 
Je me permet de remonterle sujet car j'ai le meme soucis avec le org.apache.tools.ant qui ferme l'application une fois le script éxecuté. Existe-t-il une solution pour éviter cela?
 
Merci :)

Reply

Marsh Posté le 05-11-2008 à 13:44:53    

Si ça interrese quelqu'un j'ai trouvé une solution qui fonctionne trés bien :)

Reply

Marsh Posté le 05-11-2008 à 13:50:32    

dis toi que, comme toi, quelqu'un sera peut-être confronté un jour au problème.
 
Fait comme si ça intéressait quelqu'un, et pose la solution.


---------------
HFR - Mes sujets pour Chrome - Firefox - vérifie les nouveaux posts des topics suivis/favoris
Reply

Marsh Posté le 20-02-2009 à 10:58:35    

Même problème... alors, c'est quoi la solution STP ?

Reply

Marsh Posté le 20-02-2009 à 13:06:35    

Citation :

Citation :

HI,
 
I am using a build file from java code like this (ant 1.7, jdk1.6):

Code :
  1. Project project = new Project();
  2. project.init();
  3. ProjectHelper projectHelper = ProjectHelper.getProjectHelper();
  4. projectHelper.parse(project, buildfile); project.executeTarget(target);


with a simpler build file it is working fine, with one that uses imports, I get this buildexcpetion:
 
build.xml:4: import requires support in ProjectHelper
 
any idea?


The import task requires a reference of ProjectHelper to be available in the Project. This is done automatically by using ProjectHelper.configureProject(Project project, File buildFile) like this for instance:

Code :
  1. Project project = new Project();
  2. project.init();
  3. ProjectHelper.configureProject(project, buildfile);
  4. project.executeTarget(target);


Xavier


PS: J'ai trouvé cette solution ici.


Message édité par laloi666 le 20-02-2009 à 13:10:33
Reply

Marsh Posté le    

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed