【问题标题】:Ant build script executing <sql> task using java code使用 java 代码执行 <sql> 任务的 Ant 构建脚本
【发布时间】:2009-11-02 19:21:16
【问题描述】:

任何想法,为什么在通过 java 代码执行 ANT 构建脚本的 SQL 任务后,没有一个调试 cmets 被打印一次?

构建脚本中执行sql的java类是

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);
      }
   }
}

我没有看到调试字符串“After” 打印在控制台中。仅当我尝试使用 java 代码执行 sql 任务时才注意到此问题。

ant 脚本中包含以下简单的事务标记。

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

有什么想法吗?

提前致谢。

【问题讨论】:

  • 确保将 sql 任务的“输出”属性值覆盖到某个 .txt 文件。这应该可以解决问题。
  • @Jay - 如果你已经回答了这个问题,你可以发布答案并接受它,这样问题就不会出现在未回答的列表中吗?
  • 嗨。此代码执行 ant 文件名 build-copy.xml。该文件是否已经存在或动态创建?
  • @Iso,build-copy.xml 是一个可以使用/现有的文件。

标签: java ant


【解决方案1】:

添加标签的输出属性即可解决问题。

【讨论】:

    【解决方案2】:

    使用 java 代码执行任何任务的 Ant 构建脚本示例:

    • 将日志定向到控制台和字节数组;
    • 填写Ant项目变量;
    • 执行一个蚂蚁任务;
    • 将输出日志添加到swing组件(javax.swing.JTextArea);

    查看源码: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;
    

    }

    【讨论】:

      猜你喜欢
      • 2017-12-18
      • 1970-01-01
      • 1970-01-01
      • 2010-12-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-02-14
      • 2011-02-07
      相关资源
      最近更新 更多