docs: @Override
      public void execute() throws BuildException {
          initialize();
  
          final Job job = getJob(tempDir, getProject());
          try {
              for (final ModuleElem m : modules) {
                  m.setProject(getProject());
                  m.setLocation(getLocation());
                  final PipelineHashIO pipelineInput = new PipelineHashIO();
                  for (final Map.Entry<String, String> e : attrs.entrySet()) {
                      pipelineInput.setAttribute(e.getKey(), e.getValue());
                  }
                  AbstractPipelineModule mod = getPipelineModule(m, pipelineInput);
                  long start = System.currentTimeMillis();
                  mod.setLogger(logger);
                  mod.setJob(job);
                  mod.execute(pipelineInput);
                  long end = System.currentTimeMillis();
                  logger.debug("{0} processing took {1} ms", mod.getClass().getSimpleName(), end - start);
              }
          } catch (final DITAOTException e) {
              throw new BuildException("Failed to run pipeline: " + e.getMessage(), e);
          }
      }