code: private void determineNonGeneratedSourceRoots () throws MojoExecutionException
    {
      this.nonGeneratedSourceRoots = new LinkedHashSet <> ();
      try
      {
        final String targetPrefix = new File (this.project.getBuild ().getDirectory ()).getCanonicalPath () +
                                    File.separator;
        final List <String> sourceRoots = this.project.getCompileSourceRoots ();
        for (final String aElement : sourceRoots)
        {
          File sourceRoot = new File (aElement);
          if (!sourceRoot.isAbsolute ())
          {
            sourceRoot = new File (this.project.getBasedir (), sourceRoot.getPath ());
          }
          final String sourcePath = sourceRoot.getCanonicalPath ();
          if (!sourcePath.startsWith (targetPrefix))
          {
            this.nonGeneratedSourceRoots.add (sourceRoot);
            getLog ().debug ("Non-generated compile source root: " + sourceRoot);
          }
          else
          {
            getLog ().debug ("Generated compile source root: " + sourceRoot);
          }
        }
      }
      catch (final IOException e)
      {
        throw new MojoExecutionException ("Failed to determine non-generated source roots", e);
      }
    }
docs: Determines those compile source roots of the project that do not reside below
  the project's build directories. These compile source roots are assumed to
  contain hand-crafted sources that must not be overwritten with generated
  files. In most cases, this is simply "${project.build.sourceDirectory}".
  
  @throws MojoExecutionException
  If the compile source rotos could not be determined.