You are viewing a plain text version of this content. The canonical link for it is here.
Posted to nmaven-dev@incubator.apache.org by Shane Isbell <sh...@gmail.com> on 2008/01/10 03:05:38 UTC

Re: svn commit: r608765 - in /incubator/nmaven/trunk/plugins/maven-compiler-plugin/src/main/java/org/apache/maven/dotnet/plugin/compiler: AbstractSourceProcessorMojo.java SourceProcessorMojo.java TestSourceProcessorMojo.java

Introducing the AbstractSourceProcessorMojo breaks the ability to determine
if the source files are up-to-date. The SOURCE_FILES_UP_TO_DATE is meant to
tell the compiler mojo whether it should execute a compile, but since you
are reusing this field for both test and main classes, the main compiler
mojo can't use it.


On Jan 3, 2008 11:11 PM, <ew...@apache.org> wrote:

> Author: eworley
> Date: Thu Jan  3 23:11:25 2008
> New Revision: 608765
>
> URL: http://svn.apache.org/viewvc?rev=608765&view=rev
> Log:
> Refactored source processors to have a common abstract base class
>
> Added:
>
>  incubator/nmaven/trunk/plugins/maven-compiler-plugin/src/main/java/org/apache/maven/dotnet/plugin/compiler/AbstractSourceProcessorMojo.java
> Modified:
>
>  incubator/nmaven/trunk/plugins/maven-compiler-plugin/src/main/java/org/apache/maven/dotnet/plugin/compiler/SourceProcessorMojo.java
>
>  incubator/nmaven/trunk/plugins/maven-compiler-plugin/src/main/java/org/apache/maven/dotnet/plugin/compiler/TestSourceProcessorMojo.java
>
> Added:
> incubator/nmaven/trunk/plugins/maven-compiler-plugin/src/main/java/org/apache/maven/dotnet/plugin/compiler/AbstractSourceProcessorMojo.java
> URL:
> http://svn.apache.org/viewvc/incubator/nmaven/trunk/plugins/maven-compiler-plugin/src/main/java/org/apache/maven/dotnet/plugin/compiler/AbstractSourceProcessorMojo.java?rev=608765&view=auto
>
> ==============================================================================
> ---
> incubator/nmaven/trunk/plugins/maven-compiler-plugin/src/main/java/org/apache/maven/dotnet/plugin/compiler/AbstractSourceProcessorMojo.java
> (added)
> +++
> incubator/nmaven/trunk/plugins/maven-compiler-plugin/src/main/java/org/apache/maven/dotnet/plugin/compiler/AbstractSourceProcessorMojo.java
> Thu Jan  3 23:11:25 2008
> @@ -0,0 +1,153 @@
> +/*
> + * Licensed to the Apache Software Foundation (ASF) under one
> + * or more contributor license agreements.  See the NOTICE file
> + * distributed with this work for additional information
> + * regarding copyright ownership.  The ASF licenses this file
> + * to you under the Apache License, Version 2.0 (the
> + * "License"); you may not use this file except in compliance
> + * with the License.  You may obtain a copy of the License at
> + *
> + *   http://www.apache.org/licenses/LICENSE-2.0
> + *
> + * Unless required by applicable law or agreed to in writing,
> + * software distributed under the License is distributed on an
> + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
> + * KIND, either express or implied.  See the License for the
> + * specific language governing permissions and limitations
> + * under the License.
> + */
> +package org.apache.maven.dotnet.plugin.compiler;
> +
> +import java.io.File;
> +import java.io.IOException;
> +import java.util.ArrayList;
> +import java.util.Arrays;
> +import java.util.List;
> +
> +import org.apache.maven.dotnet.ProgrammingLanguage;
> +import org.apache.maven.plugin.AbstractMojo;
> +import org.apache.maven.plugin.MojoExecutionException;
> +import org.apache.maven.project.MavenProject;
> +import org.codehaus.plexus.util.DirectoryScanner;
> +import org.codehaus.plexus.util.FileUtils;
> +
> +public abstract class AbstractSourceProcessorMojo
> +    extends AbstractMojo
> +{
> +    /**
> +     * The maven project.
> +     *
> +     * @parameter expression="${project}"
> +     * @required
> +     */
> +    protected MavenProject project;
> +
> +    /**
> +     * @parameter expression = "${includes}"
> +     */
> +    private String[] includes;
> +
> +    /**
> +     * @parameter expression = "${excludes}"
> +     */
> +    private String[] excludes;
> +
> +    /**
> +     * .NET Language. The default value is <code>C_SHARP</code>. Not case
> or white-space sensitive.
> +     *
> +     * @parameter expression="${language}" default-value = "C_SHARP"
> +     * @required
> +     */
> +    private String language;
> +
> +    /**
> +     * @return <code>File</code> The source directory to process
> +     */
> +    protected abstract File getSourceDirectory();
> +
> +    /**
> +     * @return <code>File</code> The output directory where the processed
> source
> +     * will be placed
> +     */
> +    protected abstract File getOutputDirectory();
> +
> +    protected void processSources()
> +        throws MojoExecutionException
> +    {
> +        File sourceDirectory = getSourceDirectory();
> +
> +        if ( !sourceDirectory.exists() )
> +        {
> +            getLog().info( "NMAVEN-904-001: No source files to copy" );
> +            return;
> +        }
> +        DirectoryScanner directoryScanner = new DirectoryScanner();
> +        directoryScanner.setBasedir( sourceDirectory );
> +
> +        List<String> excludeList = new ArrayList<String>(Arrays.asList
> (excludes));
> +        //target files
> +        excludeList.add( "obj/**" );
> +        excludeList.add( "bin/**" );
> +        excludeList.add( "target/**" );
> +        //Misc
> +        excludeList.add( "Resources/**" );
> +        excludeList.add( "Test/**" );
> +
> +        List<String> includeList = new ArrayList<String>(Arrays.asList
> (includes));
> +        includeList.add( "**/*." + ProgrammingLanguage.valueOf( language
> ).getClassFileExtension() );
> +
> +        directoryScanner.setIncludes( includeList.toArray( includes ) );
> +        directoryScanner.setExcludes( excludeList.toArray( excludes ) );
> +        directoryScanner.addDefaultExcludes();
> +
> +        File outputDirectory = getOutputDirectory();
> +        directoryScanner.scan();
> +        String[] files = directoryScanner.getIncludedFiles();
> +        getLog().info( "NMAVEN-904-002: Copying source files: From = " +
> sourceDirectory + ",  To = " +
> +            outputDirectory + ", File Count = " + files.length );
> +
> +        super.getPluginContext().put( "SOURCE_FILES_UP_TO_DATE",
> Boolean.TRUE );
> +        for ( String file : files )
> +        {
> +            try
> +            {
> +                File sourceFile = new File( sourceDirectory, file );
> +                File targetFile = new File( outputDirectory, file );
> +                if ( sourceFile.lastModified() > targetFile.lastModified()
> )
> +                {
> +                    super.getPluginContext().put(
> "SOURCE_FILES_UP_TO_DATE", Boolean.FALSE );
> +                    FileUtils.copyFile( sourceFile, targetFile );
> +                    targetFile.setLastModified( System.currentTimeMillis()
> );
> +                }
> +            }
> +            catch ( IOException e )
> +            {
> +                throw new MojoExecutionException( "NMAVEN-904-000: Unable
> to process sources", e );
> +            }
> +        }
> +
> +        // Update the scanner to scan the output directory, and rescan
> +        List<String> outputDirExcludes = new
> ArrayList<String>(excludeList);
> +        // Ignore meta-inf, including assembly info
> +        outputDirExcludes.add( "META-INF/**" );
> +        directoryScanner.setExcludes( outputDirExcludes.toArray( new
> String[0] ) );
> +        directoryScanner.setBasedir( outputDirectory );
> +        directoryScanner.scan();
> +
> +        // Synchronize the target folder with the source.  Specifically
> delete the targetFile if
> +        // the source file no longer exists
> +        for ( String file : directoryScanner.getIncludedFiles() )
> +        {
> +               File sourceFile = new File( sourceDirectory, file );
> +               File targetFile = new File( outputDirectory, file );
> +
> +            if ( !sourceFile.exists() && targetFile.exists() )
> +            {
> +               if ( !targetFile.delete() )
> +               {
> +                       getLog().warn( "Unable to delete stale target file
> " + targetFile.getPath() );
> +               }
> +            }
> +        }
> +    }
> +}
>
> Modified:
> incubator/nmaven/trunk/plugins/maven-compiler-plugin/src/main/java/org/apache/maven/dotnet/plugin/compiler/SourceProcessorMojo.java
> URL:
> http://svn.apache.org/viewvc/incubator/nmaven/trunk/plugins/maven-compiler-plugin/src/main/java/org/apache/maven/dotnet/plugin/compiler/SourceProcessorMojo.java?rev=608765&r1=608764&r2=608765&view=diff
>
> ==============================================================================
> ---
> incubator/nmaven/trunk/plugins/maven-compiler-plugin/src/main/java/org/apache/maven/dotnet/plugin/compiler/SourceProcessorMojo.java
> (original)
> +++
> incubator/nmaven/trunk/plugins/maven-compiler-plugin/src/main/java/org/apache/maven/dotnet/plugin/compiler/SourceProcessorMojo.java
> Thu Jan  3 23:11:25 2008
> @@ -18,20 +18,10 @@
>  */
>  package org.apache.maven.dotnet.plugin.compiler;
>
> -import org.apache.maven.plugin.AbstractMojo;
> -import org.apache.maven.plugin.MojoExecutionException;
> -import org.apache.maven.dotnet.ProgrammingLanguage;
> -import org.apache.maven.dotnet.BuildDirectories;
> -import org.apache.maven.project.MavenProject;
> -
> -import org.codehaus.plexus.util.DirectoryScanner;
> -import org.codehaus.plexus.util.FileUtils;
> -
>  import java.io.File;
> -import java.io.IOException;
> -import java.util.Arrays;
> -import java.util.List;
> -import java.util.ArrayList;
> +
> +import org.apache.maven.dotnet.BuildDirectories;
> +import org.apache.maven.plugin.MojoExecutionException;
>
>  /**
>  * Copies source files to target directory.
> @@ -42,113 +32,25 @@
>  */
>
>  public class SourceProcessorMojo
> -    extends AbstractMojo
> +    extends AbstractSourceProcessorMojo
>  {
>
> -    /**
> -     * The maven project.
> -     *
> -     * @parameter expression="${project}"
> -     * @required
> -     */
> -    private MavenProject project;
> -
> -    /**
> -     * @parameter expression = "${includes}"
> -     */
> -    private String[] includes;
> -
> -    /**
> -     * @parameter expression = "${excludes}"
> -     */
> -    private String[] excludes;
> -
> -    /**
> -     * .NET Language. The default value is <code>C_SHARP</code>. Not case
> or white-space sensitive.
> -     *
> -     * @parameter expression="${language}" default-value = "C_SHARP"
> -     * @required
> -     */
> -    private String language;
> -
>     public void execute()
>         throws MojoExecutionException
>     {
> -        File sourceDirectory = new File( project.getBuild().getSourceDirectory()
> );
> -        File outputDirectory =
> -            new File( project.getBuild().getDirectory(),
> BuildDirectories.BUILD_SOURCES.getBuildDirectoryName() );
> -
> -        if ( !sourceDirectory.exists() )
> -        {
> -            getLog().info( "NMAVEN-904-001: No source files to copy" );
> -            return;
> -        }
> -        DirectoryScanner directoryScanner = new DirectoryScanner();
> -        directoryScanner.setBasedir( sourceDirectory );
> -
> -        List<String> excludeList = new ArrayList<String>(Arrays.asList
> (excludes));
> -        //target files
> -        excludeList.add( "obj/**" );
> -        excludeList.add( "bin/**" );
> -        excludeList.add( "target/**" );
> -        //Misc
> -        excludeList.add( "Resources/**" );
> -        excludeList.add( "Test/**" );
> -
> -        List<String> includeList = new ArrayList<String>(Arrays.asList
> (includes));
> -        includeList.add( "**/*." + ProgrammingLanguage.valueOf( language
> ).getClassFileExtension() );
> -
> -        directoryScanner.setIncludes( includeList.toArray( includes ) );
> -        directoryScanner.setExcludes( excludeList.toArray( excludes ) );
> -        directoryScanner.addDefaultExcludes();
> -
> -        directoryScanner.scan();
> -        String[] files = directoryScanner.getIncludedFiles();
> -        getLog().info( "NMAVEN-904-002: Copying source files: From = " +
> sourceDirectory + ",  To = " +
> -            outputDirectory + ", File Count = " + files.length );
> -
> -        super.getPluginContext().put( "SOURCE_FILES_UP_TO_DATE",
> Boolean.TRUE );
> -        for ( String file : files )
> -        {
> -            try
> -            {
> -                File sourceFile = new File( sourceDirectory, file );
> -                File targetFile = new File( outputDirectory, file );
> -                if ( sourceFile.lastModified() > targetFile.lastModified()
> )
> -                {
> -                    super.getPluginContext().put(
> "SOURCE_FILES_UP_TO_DATE", Boolean.FALSE );
> -                    FileUtils.copyFile( sourceFile, targetFile );
> -                    targetFile.setLastModified( System.currentTimeMillis()
> );
> -                }
> -            }
> -            catch ( IOException e )
> -            {
> -                throw new MojoExecutionException( "NMAVEN-904-000: Unable
> to process sources", e );
> -            }
> -        }
> -
> -        // Update the scanner to scan the output directory, and rescan
> -        List<String> outputDirExcludes = new
> ArrayList<String>(excludeList);
> -        // Ignore meta-inf, including assembly info
> -        outputDirExcludes.add( "META-INF/**" );
> -        directoryScanner.setExcludes( outputDirExcludes.toArray( new
> String[0] ) );
> -        directoryScanner.setBasedir( outputDirectory );
> -        directoryScanner.scan();
> -
> -        // Synchronize the target folder with the source.  Specifically
> delete the targetFile if
> -        // the source file no longer exists
> -        for ( String file : directoryScanner.getIncludedFiles() )
> -        {
> -               File sourceFile = new File( sourceDirectory, file );
> -               File targetFile = new File( outputDirectory, file );
> -
> -            if ( !sourceFile.exists() && targetFile.exists() )
> -            {
> -               if ( !targetFile.delete() )
> -               {
> -                       getLog().warn( "Unable to delete stale target file
> " + targetFile.getPath() );
> -               }
> -            }
> -        }
> +        processSources();
> +    }
> +
> +    @Override
> +    protected File getOutputDirectory()
> +    {
> +        return new File( project.getBuild().getDirectory(),
> +
> BuildDirectories.BUILD_SOURCES.getBuildDirectoryName() );
> +    }
> +
> +    @Override
> +    protected File getSourceDirectory()
> +    {
> +        return new File( project.getBuild().getSourceDirectory() );
>     }
>  }
>
> Modified:
> incubator/nmaven/trunk/plugins/maven-compiler-plugin/src/main/java/org/apache/maven/dotnet/plugin/compiler/TestSourceProcessorMojo.java
> URL:
> http://svn.apache.org/viewvc/incubator/nmaven/trunk/plugins/maven-compiler-plugin/src/main/java/org/apache/maven/dotnet/plugin/compiler/TestSourceProcessorMojo.java?rev=608765&r1=608764&r2=608765&view=diff
>
> ==============================================================================
> ---
> incubator/nmaven/trunk/plugins/maven-compiler-plugin/src/main/java/org/apache/maven/dotnet/plugin/compiler/TestSourceProcessorMojo.java
> (original)
> +++
> incubator/nmaven/trunk/plugins/maven-compiler-plugin/src/main/java/org/apache/maven/dotnet/plugin/compiler/TestSourceProcessorMojo.java
> Thu Jan  3 23:11:25 2008
> @@ -18,20 +18,10 @@
>  */
>  package org.apache.maven.dotnet.plugin.compiler;
>
> -import org.apache.maven.plugin.AbstractMojo;
> -import org.apache.maven.plugin.MojoExecutionException;
> -import org.apache.maven.dotnet.ProgrammingLanguage;
> -import org.apache.maven.dotnet.BuildDirectories;
> -import org.apache.maven.project.MavenProject;
> -
> -import org.codehaus.plexus.util.DirectoryScanner;
> -import org.codehaus.plexus.util.FileUtils;
> -
>  import java.io.File;
> -import java.io.IOException;
> -import java.util.Arrays;
> -import java.util.List;
> -import java.util.ArrayList;
> +
> +import org.apache.maven.dotnet.BuildDirectories;
> +import org.apache.maven.plugin.MojoExecutionException;
>
>  /**
>  * Copies test source files to target directory.
> @@ -40,36 +30,10 @@
>  * @phase process-test-sources
>  * @description Copies source files to target directory.
>  */
> -
>  public class TestSourceProcessorMojo
> -    extends AbstractMojo
> +    extends AbstractSourceProcessorMojo
>  {
> -    /**
> -     * The maven project.
> -     *
> -     * @parameter expression="${project}"
> -     * @required
> -     */
> -    private MavenProject project;
> -
> -    /**
> -     * @parameter expression = "${includes}"
> -     */
> -    private String[] includes;
> -
> -    /**
> -     * @parameter expression = "${excludes}"
> -     */
> -    private String[] excludes;
> -
> -    /**
> -     * .NET Language. The default value is <code>C_SHARP</code>. Not case
> or white-space sensitive.
> -     *
> -     * @parameter expression="${language}" default-value = "C_SHARP"
> -     * @required
> -     */
> -    private String language;
> -
> +
>     public void execute()
>         throws MojoExecutionException
>     {
> @@ -80,75 +44,19 @@
>             return;
>         }
>
> -        File testSourceDirectory = new File( project.getBuild().getTestSourceDirectory()
> );
> -        File outputDirectory =
> -            new File( project.getBuild().getDirectory(),
> BuildDirectories.TEST_SOURCES.getBuildDirectoryName() );
> +        processSources();
> +    }
>
> -        if ( !testSourceDirectory.exists() )
> -        {
> -            getLog().info( "NMAVEN-904-001: No test source files to copy"
> );
> -            return;
> -        }
> -        DirectoryScanner directoryScanner = new DirectoryScanner();
> -        directoryScanner.setBasedir( testSourceDirectory );
> -
> -        List<String> excludeList = new ArrayList<String>(Arrays.asList
> (excludes));
> -        List<String> includeList = new ArrayList<String>(Arrays.asList
> (includes));
> -        includeList.add( "**/*." + ProgrammingLanguage.valueOf( language
> ).getClassFileExtension() );
> -
> -        directoryScanner.setIncludes( includeList.toArray( includes ) );
> -        directoryScanner.setExcludes( excludeList.toArray( excludes ) );
> -
> -        directoryScanner.addDefaultExcludes();
> -
> -        directoryScanner.scan();
> -        String[] files = directoryScanner.getIncludedFiles();
> -        getLog().info( "NMAVEN-904-002: Copying test source files: From =
> " + testSourceDirectory + ",  To = " +
> -            outputDirectory + ", File Count = " + files.length );
> +    @Override
> +    protected File getOutputDirectory()
> +    {
> +        return new File( project.getBuild().getDirectory(),
> +
> BuildDirectories.TEST_SOURCES.getBuildDirectoryName() );
> +    }
>
> -        super.getPluginContext().put( "TEST SOURCE_FILES_UP_TO_DATE",
> Boolean.TRUE );
> -        for ( String file : files )
> -        {
> -            try
> -            {
> -                File sourceFile = new File( testSourceDirectory, file );
> -                File targetFile = new File( outputDirectory, file );
> -                if ( sourceFile.lastModified() > targetFile.lastModified()
> )
> -                {
> -                    super.getPluginContext().put( "TEST
> SOURCE_FILES_UP_TO_DATE", Boolean.FALSE );
> -                    FileUtils.copyFile( sourceFile, targetFile );
> -                    targetFile.setLastModified( System.currentTimeMillis()
> );
> -                }
> -            }
> -            catch ( IOException e )
> -            {
> -                throw new MojoExecutionException( "NMAVEN-904-000: Unable
> to process test sources", e );
> -            }
> -        }
> -
> -        // Update the scanner to scan the output directory, and rescan
> -        directoryScanner.setBasedir(outputDirectory);
> -        List<String> outputDirExcludes = new
> ArrayList<String>(excludeList);
> -        // Ignore meta-inf, including assembly info
> -        outputDirExcludes.add( "META-INF/**" );
> -        directoryScanner.setExcludes( outputDirExcludes.toArray( new
> String[0] ) );
> -        directoryScanner.setBasedir( outputDirectory );
> -        directoryScanner.scan();
> -
> -       // Synchronize the target folder with the source.  Specifically
> delete the targetFile if
> -        // the source file no longer exists
> -        for ( String file : directoryScanner.getIncludedFiles() )
> -        {
> -               File sourceFile = new File( testSourceDirectory, file );
> -               File targetFile = new File( outputDirectory, file );
> -
> -            if ( !sourceFile.exists() && targetFile.exists() )
> -            {
> -               if ( !targetFile.delete() )
> -               {
> -                       getLog().warn( "Unable to delete stale target file
> " + targetFile.getPath() );
> -               }
> -            }
> -        }
> +    @Override
> +    protected File getSourceDirectory()
> +    {
> +        return new File( project.getBuild().getTestSourceDirectory() );
>     }
>  }
>
>
>

Re: svn commit: r608765 - in /incubator/nmaven/trunk/plugins/maven-compiler-plugin/src/main/java/org/apache/maven/dotnet/plugin/compiler: AbstractSourceProcessorMojo.java SourceProcessorMojo.java TestSourceProcessorMojo.java

Posted by Evan Worley <ev...@gmail.com>.
Yes, you're right.  We need to do this differently for each type of source
we process, e.g. TEST_SOURCE_FILES_UP_TO_DATE, etc.

-Evan

On Jan 9, 2008 7:05 PM, Shane Isbell <sh...@gmail.com> wrote:

> Introducing the AbstractSourceProcessorMojo breaks the ability to
> determine
> if the source files are up-to-date. The SOURCE_FILES_UP_TO_DATE is meant
> to
> tell the compiler mojo whether it should execute a compile, but since you
> are reusing this field for both test and main classes, the main compiler
> mojo can't use it.
>
>
> On Jan 3, 2008 11:11 PM, <ew...@apache.org> wrote:
>
> > Author: eworley
> > Date: Thu Jan  3 23:11:25 2008
> > New Revision: 608765
> >
> > URL: http://svn.apache.org/viewvc?rev=608765&view=rev
> > Log:
> > Refactored source processors to have a common abstract base class
> >
> > Added:
> >
> >
>  incubator/nmaven/trunk/plugins/maven-compiler-plugin/src/main/java/org/apache/maven/dotnet/plugin/compiler/AbstractSourceProcessorMojo.java
> > Modified:
> >
> >
>  incubator/nmaven/trunk/plugins/maven-compiler-plugin/src/main/java/org/apache/maven/dotnet/plugin/compiler/SourceProcessorMojo.java
> >
> >
>  incubator/nmaven/trunk/plugins/maven-compiler-plugin/src/main/java/org/apache/maven/dotnet/plugin/compiler/TestSourceProcessorMojo.java
> >
> > Added:
> >
> incubator/nmaven/trunk/plugins/maven-compiler-plugin/src/main/java/org/apache/maven/dotnet/plugin/compiler/AbstractSourceProcessorMojo.java
> > URL:
> >
> http://svn.apache.org/viewvc/incubator/nmaven/trunk/plugins/maven-compiler-plugin/src/main/java/org/apache/maven/dotnet/plugin/compiler/AbstractSourceProcessorMojo.java?rev=608765&view=auto
> >
> >
> ==============================================================================
> > ---
> >
> incubator/nmaven/trunk/plugins/maven-compiler-plugin/src/main/java/org/apache/maven/dotnet/plugin/compiler/AbstractSourceProcessorMojo.java
> > (added)
> > +++
> >
> incubator/nmaven/trunk/plugins/maven-compiler-plugin/src/main/java/org/apache/maven/dotnet/plugin/compiler/AbstractSourceProcessorMojo.java
> > Thu Jan  3 23:11:25 2008
> > @@ -0,0 +1,153 @@
> > +/*
> > + * Licensed to the Apache Software Foundation (ASF) under one
> > + * or more contributor license agreements.  See the NOTICE file
> > + * distributed with this work for additional information
> > + * regarding copyright ownership.  The ASF licenses this file
> > + * to you under the Apache License, Version 2.0 (the
> > + * "License"); you may not use this file except in compliance
> > + * with the License.  You may obtain a copy of the License at
> > + *
> > + *   http://www.apache.org/licenses/LICENSE-2.0
> > + *
> > + * Unless required by applicable law or agreed to in writing,
> > + * software distributed under the License is distributed on an
> > + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
> > + * KIND, either express or implied.  See the License for the
> > + * specific language governing permissions and limitations
> > + * under the License.
> > + */
> > +package org.apache.maven.dotnet.plugin.compiler;
> > +
> > +import java.io.File;
> > +import java.io.IOException;
> > +import java.util.ArrayList;
> > +import java.util.Arrays;
> > +import java.util.List;
> > +
> > +import org.apache.maven.dotnet.ProgrammingLanguage;
> > +import org.apache.maven.plugin.AbstractMojo;
> > +import org.apache.maven.plugin.MojoExecutionException;
> > +import org.apache.maven.project.MavenProject;
> > +import org.codehaus.plexus.util.DirectoryScanner;
> > +import org.codehaus.plexus.util.FileUtils;
> > +
> > +public abstract class AbstractSourceProcessorMojo
> > +    extends AbstractMojo
> > +{
> > +    /**
> > +     * The maven project.
> > +     *
> > +     * @parameter expression="${project}"
> > +     * @required
> > +     */
> > +    protected MavenProject project;
> > +
> > +    /**
> > +     * @parameter expression = "${includes}"
> > +     */
> > +    private String[] includes;
> > +
> > +    /**
> > +     * @parameter expression = "${excludes}"
> > +     */
> > +    private String[] excludes;
> > +
> > +    /**
> > +     * .NET Language. The default value is <code>C_SHARP</code>. Not
> case
> > or white-space sensitive.
> > +     *
> > +     * @parameter expression="${language}" default-value = "C_SHARP"
> > +     * @required
> > +     */
> > +    private String language;
> > +
> > +    /**
> > +     * @return <code>File</code> The source directory to process
> > +     */
> > +    protected abstract File getSourceDirectory();
> > +
> > +    /**
> > +     * @return <code>File</code> The output directory where the
> processed
> > source
> > +     * will be placed
> > +     */
> > +    protected abstract File getOutputDirectory();
> > +
> > +    protected void processSources()
> > +        throws MojoExecutionException
> > +    {
> > +        File sourceDirectory = getSourceDirectory();
> > +
> > +        if ( !sourceDirectory.exists() )
> > +        {
> > +            getLog().info( "NMAVEN-904-001: No source files to copy" );
> > +            return;
> > +        }
> > +        DirectoryScanner directoryScanner = new DirectoryScanner();
> > +        directoryScanner.setBasedir( sourceDirectory );
> > +
> > +        List<String> excludeList = new ArrayList<String>(Arrays.asList
> > (excludes));
> > +        //target files
> > +        excludeList.add( "obj/**" );
> > +        excludeList.add( "bin/**" );
> > +        excludeList.add( "target/**" );
> > +        //Misc
> > +        excludeList.add( "Resources/**" );
> > +        excludeList.add( "Test/**" );
> > +
> > +        List<String> includeList = new ArrayList<String>(Arrays.asList
> > (includes));
> > +        includeList.add( "**/*." + ProgrammingLanguage.valueOf(
> language
> > ).getClassFileExtension() );
> > +
> > +        directoryScanner.setIncludes( includeList.toArray( includes )
> );
> > +        directoryScanner.setExcludes( excludeList.toArray( excludes )
> );
> > +        directoryScanner.addDefaultExcludes();
> > +
> > +        File outputDirectory = getOutputDirectory();
> > +        directoryScanner.scan();
> > +        String[] files = directoryScanner.getIncludedFiles();
> > +        getLog().info( "NMAVEN-904-002: Copying source files: From = "
> +
> > sourceDirectory + ",  To = " +
> > +            outputDirectory + ", File Count = " + files.length );
> > +
> > +        super.getPluginContext().put( "SOURCE_FILES_UP_TO_DATE",
> > Boolean.TRUE );
> > +        for ( String file : files )
> > +        {
> > +            try
> > +            {
> > +                File sourceFile = new File( sourceDirectory, file );
> > +                File targetFile = new File( outputDirectory, file );
> > +                if ( sourceFile.lastModified() >
> targetFile.lastModified()
> > )
> > +                {
> > +                    super.getPluginContext().put(
> > "SOURCE_FILES_UP_TO_DATE", Boolean.FALSE );
> > +                    FileUtils.copyFile( sourceFile, targetFile );
> > +                    targetFile.setLastModified(
> System.currentTimeMillis()
> > );
> > +                }
> > +            }
> > +            catch ( IOException e )
> > +            {
> > +                throw new MojoExecutionException( "NMAVEN-904-000:
> Unable
> > to process sources", e );
> > +            }
> > +        }
> > +
> > +        // Update the scanner to scan the output directory, and rescan
> > +        List<String> outputDirExcludes = new
> > ArrayList<String>(excludeList);
> > +        // Ignore meta-inf, including assembly info
> > +        outputDirExcludes.add( "META-INF/**" );
> > +        directoryScanner.setExcludes( outputDirExcludes.toArray( new
> > String[0] ) );
> > +        directoryScanner.setBasedir( outputDirectory );
> > +        directoryScanner.scan();
> > +
> > +        // Synchronize the target folder with the source.  Specifically
> > delete the targetFile if
> > +        // the source file no longer exists
> > +        for ( String file : directoryScanner.getIncludedFiles() )
> > +        {
> > +               File sourceFile = new File( sourceDirectory, file );
> > +               File targetFile = new File( outputDirectory, file );
> > +
> > +            if ( !sourceFile.exists() && targetFile.exists() )
> > +            {
> > +               if ( !targetFile.delete() )
> > +               {
> > +                       getLog().warn( "Unable to delete stale target
> file
> > " + targetFile.getPath() );
> > +               }
> > +            }
> > +        }
> > +    }
> > +}
> >
> > Modified:
> >
> incubator/nmaven/trunk/plugins/maven-compiler-plugin/src/main/java/org/apache/maven/dotnet/plugin/compiler/SourceProcessorMojo.java
> > URL:
> >
> http://svn.apache.org/viewvc/incubator/nmaven/trunk/plugins/maven-compiler-plugin/src/main/java/org/apache/maven/dotnet/plugin/compiler/SourceProcessorMojo.java?rev=608765&r1=608764&r2=608765&view=diff
> >
> >
> ==============================================================================
> > ---
> >
> incubator/nmaven/trunk/plugins/maven-compiler-plugin/src/main/java/org/apache/maven/dotnet/plugin/compiler/SourceProcessorMojo.java
> > (original)
> > +++
> >
> incubator/nmaven/trunk/plugins/maven-compiler-plugin/src/main/java/org/apache/maven/dotnet/plugin/compiler/SourceProcessorMojo.java
> > Thu Jan  3 23:11:25 2008
> > @@ -18,20 +18,10 @@
> >  */
> >  package org.apache.maven.dotnet.plugin.compiler;
> >
> > -import org.apache.maven.plugin.AbstractMojo;
> > -import org.apache.maven.plugin.MojoExecutionException;
> > -import org.apache.maven.dotnet.ProgrammingLanguage;
> > -import org.apache.maven.dotnet.BuildDirectories;
> > -import org.apache.maven.project.MavenProject;
> > -
> > -import org.codehaus.plexus.util.DirectoryScanner;
> > -import org.codehaus.plexus.util.FileUtils;
> > -
> >  import java.io.File;
> > -import java.io.IOException;
> > -import java.util.Arrays;
> > -import java.util.List;
> > -import java.util.ArrayList;
> > +
> > +import org.apache.maven.dotnet.BuildDirectories;
> > +import org.apache.maven.plugin.MojoExecutionException;
> >
> >  /**
> >  * Copies source files to target directory.
> > @@ -42,113 +32,25 @@
> >  */
> >
> >  public class SourceProcessorMojo
> > -    extends AbstractMojo
> > +    extends AbstractSourceProcessorMojo
> >  {
> >
> > -    /**
> > -     * The maven project.
> > -     *
> > -     * @parameter expression="${project}"
> > -     * @required
> > -     */
> > -    private MavenProject project;
> > -
> > -    /**
> > -     * @parameter expression = "${includes}"
> > -     */
> > -    private String[] includes;
> > -
> > -    /**
> > -     * @parameter expression = "${excludes}"
> > -     */
> > -    private String[] excludes;
> > -
> > -    /**
> > -     * .NET Language. The default value is <code>C_SHARP</code>. Not
> case
> > or white-space sensitive.
> > -     *
> > -     * @parameter expression="${language}" default-value = "C_SHARP"
> > -     * @required
> > -     */
> > -    private String language;
> > -
> >     public void execute()
> >         throws MojoExecutionException
> >     {
> > -        File sourceDirectory = new File( project.getBuild
> ().getSourceDirectory()
> > );
> > -        File outputDirectory =
> > -            new File( project.getBuild().getDirectory(),
> > BuildDirectories.BUILD_SOURCES.getBuildDirectoryName() );
> > -
> > -        if ( !sourceDirectory.exists() )
> > -        {
> > -            getLog().info( "NMAVEN-904-001: No source files to copy" );
> > -            return;
> > -        }
> > -        DirectoryScanner directoryScanner = new DirectoryScanner();
> > -        directoryScanner.setBasedir( sourceDirectory );
> > -
> > -        List<String> excludeList = new ArrayList<String>(Arrays.asList
> > (excludes));
> > -        //target files
> > -        excludeList.add( "obj/**" );
> > -        excludeList.add( "bin/**" );
> > -        excludeList.add( "target/**" );
> > -        //Misc
> > -        excludeList.add( "Resources/**" );
> > -        excludeList.add( "Test/**" );
> > -
> > -        List<String> includeList = new ArrayList<String>(Arrays.asList
> > (includes));
> > -        includeList.add( "**/*." + ProgrammingLanguage.valueOf(
> language
> > ).getClassFileExtension() );
> > -
> > -        directoryScanner.setIncludes( includeList.toArray( includes )
> );
> > -        directoryScanner.setExcludes( excludeList.toArray( excludes )
> );
> > -        directoryScanner.addDefaultExcludes();
> > -
> > -        directoryScanner.scan();
> > -        String[] files = directoryScanner.getIncludedFiles();
> > -        getLog().info( "NMAVEN-904-002: Copying source files: From = "
> +
> > sourceDirectory + ",  To = " +
> > -            outputDirectory + ", File Count = " + files.length );
> > -
> > -        super.getPluginContext().put( "SOURCE_FILES_UP_TO_DATE",
> > Boolean.TRUE );
> > -        for ( String file : files )
> > -        {
> > -            try
> > -            {
> > -                File sourceFile = new File( sourceDirectory, file );
> > -                File targetFile = new File( outputDirectory, file );
> > -                if ( sourceFile.lastModified() >
> targetFile.lastModified()
> > )
> > -                {
> > -                    super.getPluginContext().put(
> > "SOURCE_FILES_UP_TO_DATE", Boolean.FALSE );
> > -                    FileUtils.copyFile( sourceFile, targetFile );
> > -                    targetFile.setLastModified(
> System.currentTimeMillis()
> > );
> > -                }
> > -            }
> > -            catch ( IOException e )
> > -            {
> > -                throw new MojoExecutionException( "NMAVEN-904-000:
> Unable
> > to process sources", e );
> > -            }
> > -        }
> > -
> > -        // Update the scanner to scan the output directory, and rescan
> > -        List<String> outputDirExcludes = new
> > ArrayList<String>(excludeList);
> > -        // Ignore meta-inf, including assembly info
> > -        outputDirExcludes.add( "META-INF/**" );
> > -        directoryScanner.setExcludes( outputDirExcludes.toArray( new
> > String[0] ) );
> > -        directoryScanner.setBasedir( outputDirectory );
> > -        directoryScanner.scan();
> > -
> > -        // Synchronize the target folder with the source.  Specifically
> > delete the targetFile if
> > -        // the source file no longer exists
> > -        for ( String file : directoryScanner.getIncludedFiles() )
> > -        {
> > -               File sourceFile = new File( sourceDirectory, file );
> > -               File targetFile = new File( outputDirectory, file );
> > -
> > -            if ( !sourceFile.exists() && targetFile.exists() )
> > -            {
> > -               if ( !targetFile.delete() )
> > -               {
> > -                       getLog().warn( "Unable to delete stale target
> file
> > " + targetFile.getPath() );
> > -               }
> > -            }
> > -        }
> > +        processSources();
> > +    }
> > +
> > +    @Override
> > +    protected File getOutputDirectory()
> > +    {
> > +        return new File( project.getBuild().getDirectory(),
> > +
> > BuildDirectories.BUILD_SOURCES.getBuildDirectoryName() );
> > +    }
> > +
> > +    @Override
> > +    protected File getSourceDirectory()
> > +    {
> > +        return new File( project.getBuild().getSourceDirectory() );
> >     }
> >  }
> >
> > Modified:
> >
> incubator/nmaven/trunk/plugins/maven-compiler-plugin/src/main/java/org/apache/maven/dotnet/plugin/compiler/TestSourceProcessorMojo.java
> > URL:
> >
> http://svn.apache.org/viewvc/incubator/nmaven/trunk/plugins/maven-compiler-plugin/src/main/java/org/apache/maven/dotnet/plugin/compiler/TestSourceProcessorMojo.java?rev=608765&r1=608764&r2=608765&view=diff
> >
> >
> ==============================================================================
> > ---
> >
> incubator/nmaven/trunk/plugins/maven-compiler-plugin/src/main/java/org/apache/maven/dotnet/plugin/compiler/TestSourceProcessorMojo.java
> > (original)
> > +++
> >
> incubator/nmaven/trunk/plugins/maven-compiler-plugin/src/main/java/org/apache/maven/dotnet/plugin/compiler/TestSourceProcessorMojo.java
> > Thu Jan  3 23:11:25 2008
> > @@ -18,20 +18,10 @@
> >  */
> >  package org.apache.maven.dotnet.plugin.compiler;
> >
> > -import org.apache.maven.plugin.AbstractMojo;
> > -import org.apache.maven.plugin.MojoExecutionException;
> > -import org.apache.maven.dotnet.ProgrammingLanguage;
> > -import org.apache.maven.dotnet.BuildDirectories;
> > -import org.apache.maven.project.MavenProject;
> > -
> > -import org.codehaus.plexus.util.DirectoryScanner;
> > -import org.codehaus.plexus.util.FileUtils;
> > -
> >  import java.io.File;
> > -import java.io.IOException;
> > -import java.util.Arrays;
> > -import java.util.List;
> > -import java.util.ArrayList;
> > +
> > +import org.apache.maven.dotnet.BuildDirectories;
> > +import org.apache.maven.plugin.MojoExecutionException;
> >
> >  /**
> >  * Copies test source files to target directory.
> > @@ -40,36 +30,10 @@
> >  * @phase process-test-sources
> >  * @description Copies source files to target directory.
> >  */
> > -
> >  public class TestSourceProcessorMojo
> > -    extends AbstractMojo
> > +    extends AbstractSourceProcessorMojo
> >  {
> > -    /**
> > -     * The maven project.
> > -     *
> > -     * @parameter expression="${project}"
> > -     * @required
> > -     */
> > -    private MavenProject project;
> > -
> > -    /**
> > -     * @parameter expression = "${includes}"
> > -     */
> > -    private String[] includes;
> > -
> > -    /**
> > -     * @parameter expression = "${excludes}"
> > -     */
> > -    private String[] excludes;
> > -
> > -    /**
> > -     * .NET Language. The default value is <code>C_SHARP</code>. Not
> case
> > or white-space sensitive.
> > -     *
> > -     * @parameter expression="${language}" default-value = "C_SHARP"
> > -     * @required
> > -     */
> > -    private String language;
> > -
> > +
> >     public void execute()
> >         throws MojoExecutionException
> >     {
> > @@ -80,75 +44,19 @@
> >             return;
> >         }
> >
> > -        File testSourceDirectory = new File( project.getBuild
> ().getTestSourceDirectory()
> > );
> > -        File outputDirectory =
> > -            new File( project.getBuild().getDirectory(),
> > BuildDirectories.TEST_SOURCES.getBuildDirectoryName() );
> > +        processSources();
> > +    }
> >
> > -        if ( !testSourceDirectory.exists() )
> > -        {
> > -            getLog().info( "NMAVEN-904-001: No test source files to
> copy"
> > );
> > -            return;
> > -        }
> > -        DirectoryScanner directoryScanner = new DirectoryScanner();
> > -        directoryScanner.setBasedir( testSourceDirectory );
> > -
> > -        List<String> excludeList = new ArrayList<String>(Arrays.asList
> > (excludes));
> > -        List<String> includeList = new ArrayList<String>(Arrays.asList
> > (includes));
> > -        includeList.add( "**/*." + ProgrammingLanguage.valueOf(
> language
> > ).getClassFileExtension() );
> > -
> > -        directoryScanner.setIncludes( includeList.toArray( includes )
> );
> > -        directoryScanner.setExcludes( excludeList.toArray( excludes )
> );
> > -
> > -        directoryScanner.addDefaultExcludes();
> > -
> > -        directoryScanner.scan();
> > -        String[] files = directoryScanner.getIncludedFiles();
> > -        getLog().info( "NMAVEN-904-002: Copying test source files: From
> =
> > " + testSourceDirectory + ",  To = " +
> > -            outputDirectory + ", File Count = " + files.length );
> > +    @Override
> > +    protected File getOutputDirectory()
> > +    {
> > +        return new File( project.getBuild().getDirectory(),
> > +
> > BuildDirectories.TEST_SOURCES.getBuildDirectoryName() );
> > +    }
> >
> > -        super.getPluginContext().put( "TEST SOURCE_FILES_UP_TO_DATE",
> > Boolean.TRUE );
> > -        for ( String file : files )
> > -        {
> > -            try
> > -            {
> > -                File sourceFile = new File( testSourceDirectory, file
> );
> > -                File targetFile = new File( outputDirectory, file );
> > -                if ( sourceFile.lastModified() >
> targetFile.lastModified()
> > )
> > -                {
> > -                    super.getPluginContext().put( "TEST
> > SOURCE_FILES_UP_TO_DATE", Boolean.FALSE );
> > -                    FileUtils.copyFile( sourceFile, targetFile );
> > -                    targetFile.setLastModified(
> System.currentTimeMillis()
> > );
> > -                }
> > -            }
> > -            catch ( IOException e )
> > -            {
> > -                throw new MojoExecutionException( "NMAVEN-904-000:
> Unable
> > to process test sources", e );
> > -            }
> > -        }
> > -
> > -        // Update the scanner to scan the output directory, and rescan
> > -        directoryScanner.setBasedir(outputDirectory);
> > -        List<String> outputDirExcludes = new
> > ArrayList<String>(excludeList);
> > -        // Ignore meta-inf, including assembly info
> > -        outputDirExcludes.add( "META-INF/**" );
> > -        directoryScanner.setExcludes( outputDirExcludes.toArray( new
> > String[0] ) );
> > -        directoryScanner.setBasedir( outputDirectory );
> > -        directoryScanner.scan();
> > -
> > -       // Synchronize the target folder with the source.  Specifically
> > delete the targetFile if
> > -        // the source file no longer exists
> > -        for ( String file : directoryScanner.getIncludedFiles() )
> > -        {
> > -               File sourceFile = new File( testSourceDirectory, file );
> > -               File targetFile = new File( outputDirectory, file );
> > -
> > -            if ( !sourceFile.exists() && targetFile.exists() )
> > -            {
> > -               if ( !targetFile.delete() )
> > -               {
> > -                       getLog().warn( "Unable to delete stale target
> file
> > " + targetFile.getPath() );
> > -               }
> > -            }
> > -        }
> > +    @Override
> > +    protected File getSourceDirectory()
> > +    {
> > +        return new File( project.getBuild().getTestSourceDirectory() );
> >     }
> >  }
> >
> >
> >
>