javaantmaven-ant-tasks

Ant task goes normal in the main method, but stops after definite line during Ant execution


Does anybody know, why such ant task:

public void execute() {
    Timer timer = new Timer();
    TimerTask action = new TimerTask() {
        @SuppressWarnings("ResultOfMethodCallIgnored")
        public void run() {
            String urlsForCheckPath = arachniBinPath + "urls.txt";
            List<String> urlsForCheck;
            try {
                urlsForCheck = FileUtils.readLines(new File(urlsForCheckPath));
                if (urlsForCheck != null) {
                    for (String urlForCheck : urlsForCheck) {
                        new File(arachniLogPath).delete();
                        clearTemporary(urlForCheck);//if something remains after exceptions
                        logger.info(urlForCheck + " previous log and possibly remaining temporary files deleted.");
                        checkURL(urlForCheck);
                        urlForCheck = urlForCheck.replace("/", "-");
                        convertAndSend(urlForCheck);
                        clearTemporary(urlForCheck);
                        logger.info(urlForCheck + " temporary files deleted.");
                    }
                }
            } catch (Exception e) {
                log(e);
            }
        }
    };
    timer.schedule(action, delayBeforeStart);
}

goes normal in the main method, but stops after

 logger.info(urlForCheck + " previous log and possibly remaining temporary files deleted.");

without exceptions during execution via ant? How it can be fixed?


Solution

  • I think you should read this answer. Java: Wait for TimerTask to complete before continuing execution

    Small example:

    protected final Timer timer = new Timer();
    
    public void execute() {
       CountDownLatch latch = new CountDownLatch(1);
       timer.schedule(new TimerTask() {
           public void run() {
           }
       }, delayBeforeStart);
       try {
           latch.await();
       } catch (InterruptedException e) {
           log(e);
       }
       timer.cancel();
    }