On Mon, Sep 21, 2009 at 5:20 AM, Adam Murdoch <[email protected]> wrote:

> Hi,
>
> I'm reworking the API of the various tasks which take source as input, so
> they can handle our various types such as FileCollection and FileTree. This
> includes the tasks: Compile, GroovyCompile, ScalaCompile, Javadoc,
> Groovydoc, Scaladoc, Checkstyle, CodeNarc.
>
> I'd like to keep the ability to keep the ability to use a source directory
> or set of source directories. So, I'm thinking something like the following,
> instead of the srcDirs property:
>
> void src(Object... source)  // Interprets source as per
> CopySpec.from(source):
>
> void setSrc(Object source) // Equivalent to discarding all the current
> source and calling source(source)
>
> FileTree getSrc() // Returns the tree of source.
>
> Plus all the methods on PatternFilterable: include(), exclude(), etc.
>
> Some examples:
>
> compileJava {
>   src 'src/main/java' // includes all files under $projectDir/src/main/java
>   src 'src/java/Source1.java', 'src/java/Source2.java'  // includes the 2
> specified source files
>   src ['src/main/java', 'src/Source1.java']
>   src source.main.java // all java source in the 'main' source set
>   src { javaSrcDirNames.collect { "$srcRoot/$it" } } // 0.7 behaviour
>
>   include 'org/gradle/api/**'
> }
>
> and you can do things like:
>
> copy {
>   from compileJava.src
>   into 'some/dir'
> }
>
>
Sounds good.  Of course, I more often want to manipulate (e.g. copy) the
output than the source, but I assume that's coming.


> Some questions:
>
> - Should we call the method from() instead of src(), to be consistent with
> the Copy task?
>
>
I think either would be O.K., but using src seems more clear to me than
from.  Although, the line "src source.main.java" seems a bit redundant.


> - Do we need the include and exclude methods on these tasks? Source set has
> them, as does FileTree, so you can do:
>
> source.main.java {
>   include 'some/pattern/**'
>   exclude 'some/other/pattern/**'
> }
>
> or
>
> compileJava {
>   src fileTree {
>       from 'some/src/dir'
>       include 'some/pattern/**'
>       exclude 'some/pattern/**'
>   }
> }
>
>
I think we should have the include and exclude methods on the tasks.  The
FileTree approach would be fine if we thought it was an unusual need to
specify includes or excludes, but I don't think that it is, esp. for those
coming from Ant based projects.


-- 
John Murph
Automated Logic Research Team

Reply via email to