compile based on source roots

git-svn-id: https://svn.apache.org/repos/asf/maven/components/trunk@163423 13f79535-47bb-0310-9956-ffa450edef68
This commit is contained in:
Brett Leslie Porter 2005-02-27 21:51:52 +00:00
parent 236dc52410
commit 21f1cffa59
2 changed files with 45 additions and 20 deletions

View File

@ -129,8 +129,6 @@ public class MavenProject
//!!! Refactor, collect the list of compile source roots and create a path1:path2
// type construct from the list instead of the other way around. jvz.
private static String PS = System.getProperty( "path.separator" );
private String compileSourceRoots = "";
private String testCompileSourceRoots = "";
@ -139,25 +137,29 @@ public class MavenProject
{
if ( path != null || path.trim().length() != 0 )
{
compileSourceRoots += path + PS;
if ( compileSourceRoots.length() > 0 )
{
compileSourceRoots += File.pathSeparator;
}
compileSourceRoots += path;
}
}
public String getCompileSourceRoots()
{
// Get rid of any trailing path separators.
if ( compileSourceRoots.endsWith( PS ) )
if ( compileSourceRoots.endsWith( File.pathSeparator ) )
{
compileSourceRoots = compileSourceRoots.substring( 0, compileSourceRoots.length() - 1 );
}
// Always add the build.sourceDirectory
return getBuild().getSourceDirectory() + PS + compileSourceRoots;
return getBuild().getSourceDirectory() + File.pathSeparator + compileSourceRoots;
}
public List getCompileSourceRootsList()
{
String[] s = StringUtils.split( getCompileSourceRoots(), PS );
String[] s = StringUtils.split( getCompileSourceRoots(), File.pathSeparator );
List list = new ArrayList();
@ -173,25 +175,29 @@ public class MavenProject
{
if ( path != null || path.trim().length() != 0 )
{
testCompileSourceRoots += path + PS;
if ( testCompileSourceRoots.length() > 0 )
{
testCompileSourceRoots += File.pathSeparator;
}
testCompileSourceRoots += path;
}
}
public String getTestCompileSourceRoots()
{
// Get rid of any trailing path separators.
if ( testCompileSourceRoots.endsWith( PS ) )
if ( testCompileSourceRoots.endsWith( File.pathSeparator ) )
{
testCompileSourceRoots = testCompileSourceRoots.substring( 0, testCompileSourceRoots.length() - 1 );
}
// Always add the build.unitTestSourceDirectory
return getBuild().getUnitTestSourceDirectory() + PS + testCompileSourceRoots;
return getBuild().getUnitTestSourceDirectory() + File.pathSeparator + testCompileSourceRoots;
}
public List getTestCompileSourceRootsList()
{
String[] s = StringUtils.split( getTestCompileSourceRoots(), PS );
String[] s = StringUtils.split( getTestCompileSourceRoots(), File.pathSeparator );
List list = new ArrayList();

View File

@ -6,6 +6,7 @@ import org.codehaus.plexus.compiler.CompilerError;
import org.codehaus.plexus.compiler.javac.JavacCompiler;
import java.io.File;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Iterator;
import java.util.List;
@ -18,11 +19,11 @@ import java.util.List;
* @description Compiles application sources
*
* @parameter
* name="sourceDirectory"
* type="String"
* name="compileSourceRootsList"
* type="java.util.List"
* required="true"
* validator=""
* expression="#project.build.sourceDirectory"
* expression="#project.compileSourceRootsList"
* description=""
*
* @parameter
@ -51,8 +52,6 @@ import java.util.List;
*
* @author <a href="mailto:jason@maven.org">Jason van Zyl</a>
* @version $Id$
* @todo use compile source roots and not the pom.build.sourceDirectory so that any
* sort of preprocessing and/or source generation can be taken into consideration.
* @todo change debug parameter type to Boolean
*/
@ -70,7 +69,7 @@ public class CompilerMojo
//
// ----------------------------------------------------------------------
String sourceDirectory = (String) request.getParameter( "sourceDirectory" );
List compileSourceRootsList = (List) request.getParameter( "compileSourceRootsList" );
String outputDirectory = (String) request.getParameter( "outputDirectory" );
@ -79,17 +78,18 @@ public class CompilerMojo
// ----------------------------------------------------------------------
//
// ----------------------------------------------------------------------
if ( ! new File( sourceDirectory ).exists() )
compileSourceRootsList = removeEmptyCompileSourceRoots( compileSourceRootsList );
if ( compileSourceRootsList.isEmpty() )
{
return;
}
CompilerConfiguration compilerConfiguration = new CompilerConfiguration();
compilerConfiguration.setOutputLocation(outputDirectory);
compilerConfiguration.setClasspathEntries(Arrays.asList(classpathElements));
compilerConfiguration.setSourceLocations(Arrays.asList(new String[] {sourceDirectory}));
compilerConfiguration.setSourceLocations( compileSourceRootsList );
/* Compile with debugging info */
String debugAsString = (String) request.getParameter( "debug" );
@ -140,4 +140,23 @@ public class CompilerMojo
response.setExecutionFailure( new CompilationFailureResponse( messages ) );
}
}
/** @todo also in ant plugin. This should be resolved at some point so that it does not need to be calculated continuously - or should the plugins accept empty source roots as is? */
private static List removeEmptyCompileSourceRoots( List compileSourceRootsList )
{
List newCompileSourceRootsList = new ArrayList();
if ( compileSourceRootsList != null )
{
// copy as I may be modifying it
for ( Iterator i = compileSourceRootsList.iterator(); i.hasNext(); )
{
String srcDir = (String) i.next();
if ( !newCompileSourceRootsList.contains( srcDir ) && new File( srcDir ).exists() )
{
newCompileSourceRootsList.add( srcDir );
}
}
}
return newCompileSourceRootsList;
}
}