summary: More project types like GUI application, GWT application. Deeper integration of types with for example packaging. status: Discussions are happening and we will iteratively add features in this area after 1.0. code: planned
Most Java and JVM based projects produce more than just an archive file. We think that a richer model which better describes common patterns for Java application construction will make it simpler and quicker to define the build for every JVM based project.
Gradle will model common ways of packaging a project. Gradle will understand what a Java library is, and what a command-line application, GUI application, Web application, GWT application, OSGi application and so on are. The build master will declare this in the build along with some meta-data appropriate to that type of application. Based on this declarative meta-data, Gradle will provide the tasks, artifacts and configuration for that type of project.
For example, for a Java library, Gradle will build and publish the JAR, API documentation and source JAR for the project. For a command-line application, Gradle will build a distribution ZIP or TAR containing automatically generated wrapper scripts, runtime dependencies and documentation. From the same meta-data, it will be able to build a .exe or OS X application bundle for the application. Or provide a task to run the application from Gradle. Or generate a native installer.
Cross-cutting the model for project packaging will be a model to describe how the project is composed. Generally, a large project is composed from several smaller projects. Gradle will understand this concept and integrate it deeply. For example, for a Java library which is composed from several projects, Gradle will build a single aggregate JAR, and aggregate API documentation and source JAR. Or for an OSGi based application composed from several projects, Gradle might provide a task which installs and activates each of the project bundles into an OSGi container.
We have already made progress on this. Rene Gröschke contributed the application plugin which models a command line application: http://gradle.org/releases/1.0-milestone-3/docs/userguide/application_plugin.html