public void execute() {
    if (this.src == null) {
      throw new BuildException("Attribute src not set!");
    }

    if (this.dest == null) {
      throw new BuildException("Attribute dest not set!");
    }

    final Set<File> files = new HashSet<File>();
    gatherSourceFiles(this.src, files);

    for (File sourceFile : files) {
      try {
        final String resourceFileContent = StringResourcesExtractor.extract(sourceFile);

        if (resourceFileContent != null) {
          File resourceFile =
              new File(this.dest, getRelativePath(sourceFile.getParentFile(), this.src));
          resourceFile =
              new File(resourceFile, getNameWithoutExtension(sourceFile) + ".properties");

          resourceFile.getParentFile().mkdirs();

          final OutputStream out = new FileOutputStream(resourceFile);

          try {
            final Writer writer = new OutputStreamWriter(out);
            writer.write(resourceFileContent);
            writer.flush();
          } finally {
            try {
              out.close();
            } catch (IOException e) {
            }
          }
        }
      } catch (Exception e) {
        throw new BuildException(e);
      }
    }
  }