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, <[EMAIL PROTECTED]> 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() );
>     }
>  }
>
>
>

Reply via email to