Hans Dockter wrote:
I know that some some stuff is a bit rough ATM. I just wanted to
submit it rather quick to avoid merge nightmares as much as possible
(including for myself). But of course everything should work.
On Aug 21, 2009, at 1:49 AM, Adam Murdoch wrote:
Hans Dockter wrote:
I have just submitted a new build structure for the Gradle build.
The Gradle build is now a multi-project build with a root project
and two subprojects.
root
- gradle-core (which contains everything except wrapper)
- gradle-wrapper
This is great. It will force us to get multi-project builds working
well for java applications.
Some issues I've seen already:
- The groovydocs don't include anything from gradle-wrapper.
It is Java only. That's why the gradle-wrapper should use the Java
plugin only.
We include the java classes from gradle-core in the groovydoc. We should
either not include any java classes in the groovydoc, or include all
java+groovy in the groovydoc. I think we should include everything in
the groovydoc. As the groovydoc tool improves, this could become the
single API reference.
- The javadocs don't include anything from gradle-core.
I will look into this.
What we want here, I think, is a single javadoc task and a single
groovydoc task in the root project, whose source is the union of the
source from each subproject. We don't care about the javadoc/groovy
doc from each individual subproject.
This is how it is supposed to work. I should have tested it. Which
points out that it might be good to have some tests for our build
(e.g. check that the exploded dist has certain non-empty directories).
But I agree with John, that it should be possible to generate them for
a subproject only (although for the current Gradle build it doesn't
really matter).
Absolutely.
ATM root is doing user's guide, distribution, release and integtest.
The integtest are still part of gradle-core but executed from root.
Although this shows the enormous flexibility of Gradle it probably
should not remain like this.
How should it change, do you think?
Either the code should go into root or into a separate integtest
subproject. I both cases we face the problem of accessing some test
helper classes (e.g. HelperUtil). We could create our own subproject
for them (So far this is about 2 classes).
I don't think a separate project is the right way to go. These things
are part of the core project, just like the API is.
I think it's a pretty common pattern for a project to publish a set of
test fixtures to help clients of the project write tests for their
classes. We should build this concept into the Java plugin. Something
like: A java project may provide any of the following to other projects:
- An API
- An implementation of that API
- A test fixture API
- An implementation of that API
You could generalise this: A java project has a number of source sets.
Each source set may have an API and an implementation.
The plugins projects should also include the plugin-specific tasks. I
think it's really only Clean, Copy, and Upload which belong in
gradle-core.
-- osgi
-- jetty
-- eclipse
-- maven
-- ...
I think splitting each plugin out into separate subprojects is a bit
premature. It feels a bit too fine-grained, a bit too early. I would
prefer we just moved all the plugins and plugin-specific tasks into a
single 'gradle-plugins' subproject. We can split it later.
I know that we have discussed this already. I agree that we first
should move the whole lot. But size is I think only one indicator
whether to put something in its own subproject. The other is clear
boundaries. And putting it into single subprojects makes it also much
clearer which plugin needs which dependencies.
That is true.
Adam
---------------------------------------------------------------------
To unsubscribe from this list, please visit:
http://xircles.codehaus.org/manage_email