On Jun 3, 2009, at 11:15 AM, Adam Murdoch wrote:

I think we should do away with the processing stage which figures out which projects are included in the build, and simply allow them to be added at any point during the evaluation stage. That is, projects are just regular domain objects, not anything special. I think this consistency important. In addition, this would mean you can use plugins or classes in buildSrc to define or influence the project hierarchy without us doing anything special to support it. The same would be true of any future capability we add to let you compose the build logic. To me, this approach seems more flexible and more likely to handle use-cases we haven't anticipated, than would special-casing assembly of the project hierarchy.

I'm trying to understand the lifecycle we would have then. Let's say we have a non aggregate multi-project build. All subprojects are declared in the root project. During the evaluation phase of the root project we hit the projects closure. After a declaration of each subproject, we would create an empty project instance for this subproject. After the projects closure is evaluated the root project can configure the sub projects. After the root project is evaluated, the subprojects are evaluated (let's say by default in alphabetical order). The evaluation order can be customized by calling the subproject.evaluate() method or by creating a dependsOn relation (for example because subproject1 needs an evaluated subproject2).

Pretty much. To add a little more detail:

for projects { subproject { ... } }

when subproject { ... } is executed:

1. create a project descriptor
2. execute the closure to configure the project descriptor
3. execute the project { } closure from the subproject's build file, if present, to configure the project descriptor 4. use the project descriptor to create an empty project and add to parent project
5. fire a project added notification
6. repeat this process for any projects nested in the configure closure.

Step 3 is possibly not needed. Also, we could skip a project descriptor and create a project in step 1 instead.

Right. That would simplify things. We would expose the whole project API by that. But that would be a feature. And parts of the API which are not supposed to be used at that lifecycle phase can be shielded with an exception.

- Hans

--
Hans Dockter
Gradle Project Manager
http://www.gradle.org


---------------------------------------------------------------------
To unsubscribe from this list, please visit:

   http://xircles.codehaus.org/manage_email


Reply via email to