John Murph wrote:
On Mon, Sep 21, 2009 at 5:20 AM, Adam Murdoch <[email protected]
<mailto:[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.
You can already do that:
copy {
from compileJava.destinationDir
into 'some/dir'
}
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.
Indeed, given that this is the default. It's just an example to
demonstrate the goodness we get from replacing srcDirs property with the
more general src property. Perhaps some better examples are:
compileJava {
src fileTree('some-file.zip') // compiles all source files found in
some-file.zip
src remoteFileTree('http://some-repo/some-file.zip')
src vcsFileTree('[email protected]/some-repo/src/main/java')
}
- 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.
We do want to encourage people to specify their includes and excludes on
the source set, rather than the individual tasks. This way they are
shared by all tasks, including any new ones we add. One way to do this
is remove the patterns from the tasks.
Adam