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 <[EMAIL PROTECTED]> 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, <[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