Hans Dockter wrote:
On Sep 24, 2009, at 10:42 PM, Adam Murdoch wrote:
Steve Appling wrote:
I think I understand the javadoc issues a little more, but still
don't know exactly what to do about it.
It's actually fixed in trunk. I'm in the process of upgrading to a
new snapshot, but I wanted to investigate the heap usage before doing
so.
The java plugin doesn't seem to set up the classpath correctly for
the javadoc task.
Currently core:javadoc fails, but if I add
javadoc {
configuration = files(source.main.compileClasspath,
source.main.classes)
}
to core.gradle, it works.
This is the default in trunk now.
I copied this pattern from the root build.gradle, but I don't
understand where the configuration property of the JavaDoc task
comes from. It seems like this should be the classpath property,
but if I don't set configuration it gives an error. I don't see a
setConfiguration in JavaDoc or any of its ancestors.
I renamed it yesterday. It was configuration, now its classpath.
Should the output directory (source.main.classses) just be added to
the classpath convention in JavaPlugin.configureJavaDoc? I'm a
little confused about the connection between the classpath
convention and the configuration property.
I'm also confused about why running 'gradlew javadoc' runs javadoc
on both the root project and all the subprojects, but running
'gradlew explodedDist' which depends on the root javadoc, does not
run javadoc on the subprojects.
explodedDist doesn't depend on the subproject's javadoc tasks because
it does not include their output in the distribution. It depends only
on :javadoc, which generates a single javadoc batch which documents
all the subprojects.
So, when you run 'gradle explodedDist', you will only end up
executing :javadoc
When you run 'gradle javadoc', you're asking Gradle to execute any
task named 'javadoc' it finds in the current project and all
subprojects. Which is why it ends up executing all the javadoc tasks.
We don't care about the output of the individual subproject's javadoc
tasks, and it would be much better if they did not exist. Ditto the
groovydoc tasks.
Right, we don't care (yet) about the output of the individual
subproject's. But is it really a problem to have this functionality?
Possibly not. It's noisy in a couple of respects:
- there's extra tasks in the build which we don't use
- the subproject's javadoc/groovydoc tasks generate the documentation
for everything (ie the default), whereas the root javadoc/groovydoc
tasks generate the documentation for the API only.
To me, this is a smell that we've not got the model quite right.
If so, what can we do?
- We could disable the javadoc tasks.
- We could provide functionality for removing tasks.
- Reconsider the name matching strategy for multi-project build
execution.
I would say a better option is to improve the model so that we know
whether or not API documentation is required for a project. For example,
if we knew that the core project is a library bundled into a
distribution by the root project, then we would know that it does not
need its own javadoc task, and that we should build the aggregate
javadoc in the root project instead.
Or if we knew that the core project is a library which is distributed
stand-alone, then it would need its own API documentation, and we would
add a javadoc/groovydoc/scaladoc task as appropriate.
I think this comes down to some missing concepts:
- A project which aggregates several other projects into some
distribution. In this case, a distribution might be a fat jar or a war
or an application image or whatever.
- A project or source set which is bundled as a java library. That is we
know the difference between source which is used internally somewhere in
the same build, and source which is to be published as a JAR for use
outside the build.
- A source set has an API.
Adam
---------------------------------------------------------------------
To unsubscribe from this list, please visit:
http://xircles.codehaus.org/manage_email