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() ); > } > } > > >
