2009-11-02 6 views
1

Une idée, pourquoi aucun des commentaires de débogage n'est imprimé une fois après l'exécution de la tâche SQL du script de génération ANT via le code java?Script de génération Ant exécutant la tâche <sql> en utilisant le code Java

La classe java pour exécuter la requête SQL dans la construction scirpt est

public class AntRunnerTest { 
    private Project project; 

    public void executeTask(String taskName) { 
     try { 
     project = new Project(); 
     project.init(); 
     project.setBasedir(new String(".")); 
     ProjectHelper helper = ProjectHelper.getProjectHelper(); 
     project.addReference("ant.projectHelper", helper); 
     helper.parse(project, new File("build-copy.xml")); 
     System.out.println("Before"); 
     project.executeTarget(taskName); 
     System.out.println("After"); 
     } catch(Exception ex) { 
      System.out.println(ex.getMessage()); 
     } 
    } 

    public static void main(String args[]) { 
     try { 
     AntRunnerTest newInst = new AntRunnerTest(); 
     newInst.executeTask("sql"); 
     } catch(Exception e) { 
     System.out.println(""+e); 
     } 
    } 
} 

Je ne vois pas la chaîne de débogage « Après » s'imprimé dans la console. J'ai remarqué ce problème uniquement lorsque j'essaie d'exécuter une tâche SQL en utilisant le code Java.

Le script ant comporte la balise de transaction simple suivante.

<transaction> <![CDATA[ select now() ]]> </transaction> 

Des pensées?

Merci d'avance.

+0

Assurez-vous que vous remplacez la valeur de l'attribut "sortie" de la tâche sql à un certain fichier txt. Cela devrait résoudre le problème. – Jay

+0

@Jay - si vous avez répondu à la question, pourriez-vous poster la réponse et l'accepter, de sorte que la question n'apparaisse pas dans les listes des réponses sans réponse? –

+0

Salut. Ce code exécute le nom de fichier ant build-copy.xml. Le fichier existe-t-il déjà ou a-t-il été créé à la volée? – Iso

Répondre

1

Le problème sera résolu si vous ajoutez l'attribut de sortie de la balise.

0

Exemple d'un script de construction Ant d'exécuter une tâche à l'aide du code Java:

  • directe du journal au tableau de la console et l'octet; Remplir les variables du projet Ant;
  • exécuter une tâche ant;
  • ajouter le journal de sortie au composant swing (javax.swing.JTextArea);

Voir le code source: https://github.com/wellboyvg/workgear/blob/master/manager/src/manager/WorkGearManager.java

private boolean executeAntTask(String target) { 
boolean success = false; 
// use log output to the console 
DefaultLogger conlog = new DefaultLogger(); 
conlog.setErrorPrintStream(System.err); 
conlog.setOutputPrintStream(System.out); 
conlog.setMessageOutputLevel(Project.MSG_INFO); 
// use log output to the byte array 
DefaultLogger strlog = new DefaultLogger(); 
ByteArrayOutputStream errb = new ByteArrayOutputStream(); 
PrintStream errp = new PrintStream(errb); 
strlog.setErrorPrintStream(errp); 
ByteArrayOutputStream outb = new ByteArrayOutputStream(); 
PrintStream outp = new PrintStream(outb); 
strlog.setOutputPrintStream(outp); 
strlog.setMessageOutputLevel(Project.MSG_INFO); 
// prepare Ant 
Project project = new Project(); 
File buildfile = new File(buildname); 
project.setUserProperty("ant.file", buildfile.getAbsolutePath()); 
// add record log to the console 
project.addBuildListener(conlog); 
// add record log to the byte array 
project.addBuildListener(strlog); 
// 
try { 
    // fill the Ant project variables 
    for (Entry m : map.entrySet()) { 
    project.setUserProperty(m.getKey().toString(), m.getValue().toString()); 
    } 
    project.fireBuildStarted(); 
    project.init(); 
    ProjectHelper helper = ProjectHelper.getProjectHelper(); 
    project.addReference("ant.projectHelper", helper); 
    helper.parse(project, buildfile); 
    // execute the ant task 
    project.executeTarget(target); 
    project.fireBuildFinished(null); 
    success = true; 
} catch (BuildException buildException) { 
    project.fireBuildFinished(buildException); 
} 
// add output log to swing component (javax.swing.JTextArea) 
jtLog.append(new String(outb.toByteArray())); 
jtLog.append(new String(errb.toByteArray())); 
return success; 

}

Questions connexes