code: protected boolean copyJarAsUnprocessedToDirectoryIfNecessary( File sourceFile, File targetDirectory,
                                                                    String targetFilename )
              throws MojoExecutionException
      {
  
          if ( sourceFile == null )
          {
              throw new IllegalArgumentException( "sourceFile is null" );
          }
  
          if ( targetFilename == null )
          {
              targetFilename = sourceFile.getName();
          }
  
          File signedTargetFile = new File( targetDirectory, targetFilename );
  
          File unsignedTargetFile = toUnprocessFile( targetDirectory, targetFilename );
  
          boolean shouldCopy =
                  !signedTargetFile.exists() || ( signedTargetFile.lastModified() < sourceFile.lastModified() );
  
          shouldCopy &=
                  ( !unsignedTargetFile.exists() || ( unsignedTargetFile.lastModified() < sourceFile.lastModified() ) );
  
          if ( shouldCopy )
          {
              getIoUtil().copyFile( sourceFile, unsignedTargetFile );
  
          }
          else
          {
              getLog().debug(
                      "Source file hasn't changed. Do not reprocess " + signedTargetFile + " with " + sourceFile + "." );
          }
  
          return shouldCopy;
      }
docs: Conditionally copy the jar file into the target directory.
  The operation is not performed when a signed target file exists and is up to date.
  The signed target file name is taken from the <code>sourceFile</code> name.E
  The unsigned target file name is taken from the <code>sourceFile</code> name prefixed with UNPROCESSED_PREFIX.
  TODO this is confusing if the sourceFile is already signed. By unsigned we really mean 'unsignedbyus'
  
  @param sourceFile      source file to copy
  @param targetDirectory location of the target directory where to copy file
  @param targetFilename  [optional] to change the target filename to use (if {@code null} will
  use the sourceFile name).
  @return <code>true</code> when the file was copied, <code>false</code> otherwise.
  @throws IllegalArgumentException if sourceFile is <code>null</code> or
  <code>sourceFile.getName()</code> is <code>null</code>
  @throws MojoExecutionException   if an error occurs attempting to copy the file.