docs: public void execute() throws MojoExecutionException, MojoFailureException {
          // iterate through all <merge />
          for (Merger merger : mergers) {
              // get target file name...
              final File target = merger.getTarget();
              // get list of source files
              final List<File> sources = Arrays.asList(merger.getSources());
              // ...and use a stream
              final OutputStream targetStream = initOutput(target);
              // iterate source files
              for (File source : sources) {
                  final InputStream sourceStream = initInput(source);
                  // append
                  appendStream(sourceStream, targetStream);
                  // close source
                  if (null != sourceStream) {
                      try {
                          sourceStream.close();
                      } catch (IOException e) {
                          throw new MojoExecutionException(
                              "Could not close file: "
                                  + source.getAbsolutePath(), e);
                      }
                  }
              }
              // close target
              if (null != targetStream) {
                  try {
                      targetStream.close();
                  } catch (IOException e) {
                      throw new MojoExecutionException("Could not close file: "
                          + target.getAbsolutePath(), e);
                  }
              }
          }
      }